bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


jocs_libgdx

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
jocs_libgdx [2026/03/04 16:49]
enric_mieza_sanchez [Desenvolupament de jocs amb libGDX]
jocs_libgdx [2026/03/06 00:03] (actual)
enric_mieza_sanchez [Viewports i resolucions]
Línia 19: Línia 19:
 Necessites tenir instal·lat Android Studio. Necessites tenir instal·lat Android Studio.
  
-Crea el projecte amb l'[[https://libgdx.com/dev/project_generation/|eina per iniciar projectes libGDX]].+Crea el projecte amb l'[[https://libgdx.com/wiki/start/project-generation|eina per iniciar projectes libGDX]].
  
-==== Troubleshooting ==== 
- 
-<WRAP alert> 
-**Aquest problema està DEPRECATED i només succeïa en versions anteriors**. 
- 
-Ho deixem aquí com a //reminder// per problemes futurs. 
- 
-Si t'apareix l'[[https://stackoverflow.com/questions/70340427/unable-to-find-method-void-org-apache-commons-compress-archivers-zip-zipfile|error relacionat amb la llibreria ZIP]] tens 2 opcions: 
-  - Eliminar la compilació de la plataforma iOS. 
-  - Editar ''android/build.gradle'' i ajustar les llibreries:<file text android/build.gradle> 
-buildToolsVersion "33.0.0" 
-</file> 
-</WRAP> 
- 
-\\ 
  
 ===== Definicions ===== ===== Definicions =====
Línia 85: Línia 70:
   - **Android**: si obres el projecte amb Android Studio per defecte podràs executar en Android.   - **Android**: si obres el projecte amb Android Studio per defecte podràs executar en Android.
   - **Desktop** (java app, Windows o Linux): afegeix una nova configuració<code>RUN -> Edit configurations -> Add (+) -> Application</code>   - **Desktop** (java app, Windows o Linux): afegeix una nova configuració<code>RUN -> Edit configurations -> Add (+) -> Application</code>
-    - Selecciona Module: ''myapp.desktop.main''+    - Selecciona Module: ''myapp.lwjgl3.main''
     - Selecciona Main Class: ''DesktopLauncher''     - Selecciona Main Class: ''DesktopLauncher''
   - [[https://medium.com/@bschulte19e/deploying-your-libgdx-game-to-ios-in-2019-8d3796410d82|iOS: segueix aquestes instruccions]]. Requereix tenir un Mac, XCode i Android Studio amb RovoVM plugin   - [[https://medium.com/@bschulte19e/deploying-your-libgdx-game-to-ios-in-2019-8d3796410d82|iOS: segueix aquestes instruccions]]. Requereix tenir un Mac, XCode i Android Studio amb RovoVM plugin
-    - [[https://stackoverflow.com/questions/55670168/unable-to-select-ios-simulator-via-robovm-intellij-idea-plugin-on-android-studio|Segons diu aquí]], el simulador no s'activa, i cal descarregar la darrera versió de RoboVM d'[[http://robovm.mobidevelop.com/downloads/snapshots/idea/|aquí]] + 
-    El darrer punt del tutorial diu q cal modificar ''ios.iml'cada cop que executem. [[https://github.com/MobiVM/robovm/issues/242#issuecomment-519321280|Aquí]] hi ha una solució automatitzada.+\\ 
 + 
 +===== Viewportsresolucions límits de la pantalla ===== 
 + 
 +El codi que fem a libGDX és multiplataforma, fet que té obvis avantatges, però que se'ns complica la gestió degut a les diferents resolucions que poden tenir les diverses plataformes i els diversos dispositius. 
 + 
 +**Ves a l'article [[libGDX Viewport]] i fes l'exercici proposat.** 
 + 
 +Hi treballaràs les resolucions de pantalla i els principis per moure objectes bàsics de forma adequada dins la pantalla. En particular veuràs com fer rebotar pilotes a les parets.
  
 \\ \\
Línia 263: Línia 256:
  
 De la **llibreria Math** destaquem: De la **llibreria Math** destaquem:
-  * [[https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/math/Vector2.html|Vector2]] ens permetrà representar un vector, que té una component X i una component Y. Val la pena parar atenció als mètodes per calcular l'angle ''angleDeg()'' i ''angleRad()''+  * [[https://javadoc.io/doc/com.badlogicgames.gdx/gdx/latest/com/badlogic/gdx/math/Vector2.html|Vector2]] ens permetrà representar un vector, que té una component X i una component Y. Val la pena parar atenció als mètodes per calcular l'angle ''angleDeg()'' i ''angleRad()''
-  * [[https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/math/Rectangle.html|Rectangle]] compost per posició (X i Y) i amplada i alçada. Al tutorial Drop s'utilitza també per veure les col·lisions (entre el cubell i les gotes) amb el mètode ''intersects(Rectangle)''. Té altres mètodes útils com ''contains'' per saber si un objecte està dins d'un altre. +  * [[https://javadoc.io/doc/com.badlogicgames.gdx/gdx/latest/com/badlogic/gdx/math/Rectangle.html|Rectangle]] compost per posició (X i Y) i amplada i alçada. Al tutorial Drop s'utilitza també per veure les col·lisions (entre el cubell i les gotes) amb el mètode ''intersects(Rectangle)''. Té altres mètodes útils com ''contains'' per saber si un objecte està dins d'un altre. 
-  * [[https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/math/Circle.html|Circle]] ens anirà molt bé per a les pilotes, ja que té posició (X i Y) i radi. També ens permetrà calcular col·lisions amb altres objectes amb els mètodes ''intersect'' i ''contains''.+  * [[https://javadoc.io/doc/com.badlogicgames.gdx/gdx/latest/com/badlogic/gdx/math/Circle.html|Circle]] ens anirà molt bé per a les pilotes, ja que té posició (X i Y) i radi. També ens permetrà calcular col·lisions amb altres objectes amb els mètodes ''intersect'' i ''contains''.
  
 I a la **llibreria Graphics** destaquem: I a la **llibreria Graphics** destaquem:
-  * [[https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Batch.html|Batch]] és l'objecte que pinta imatges (Textures) amb el mètode ''draw'' (sobrecarregat amb diverses versions, mira la documentació). +  * [[https://javadoc.io/doc/com.badlogicgames.gdx/gdx/latest/com/badlogic/gdx/graphics/g2d/Batch.html|Batch]] és l'objecte que pinta imatges (Textures) amb el mètode ''draw'' (sobrecarregat amb diverses versions, mira la documentació). 
-    * El //batch// només pinta [[https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/graphics/Texture.html|Textures]] (imatges) sobre la pantalla. Si volem pintar formes de colors necessitarem l'objecte Pixmap. +    * El //batch// només pinta [[https://javadoc.io/doc/com.badlogicgames.gdx/gdx/latest/com/badlogic/gdx/graphics/Texture.html|Textures]] (imatges) sobre la pantalla. Si volem pintar formes de colors necessitarem l'objecte Pixmap. 
-  * [[https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/graphics/Pixmap.html|Pixmap]] a mode de //canvas// o "lienzo", ens permet crear imatges a partir de formes geomètriques (línia, cercle, rectangle, píxel, etc.)+  * [[https://javadoc.io/doc/com.badlogicgames.gdx/gdx/latest/com/badlogic/gdx/graphics/Pixmap.html|Pixmap]] a mode de //canvas// o "lienzo", ens permet crear imatges a partir de formes geomètriques (línia, cercle, rectangle, píxel, etc.)
  
  
Línia 298: Línia 291:
 \\ \\
  
-===== Pilotes rebotant ===== 
-Molts jocs es basen en fer rebotar pilotes per la pantalla. Us passo algunes estratègies típiques per aconseguir-ho. 
- 
-{{Pilota-rebots.png}} 
- 
-Ull! Segons aquesta imatge l'origen de coordenades està a dalt a l'esquerra. Això sol ser així en la majoria de llibreries gràfiques. libGDX, en canvi, té l'origen a baix a l'esquerra, que resulta més intuïtiu ja que està més d'acord amb els clàssics eixos de coordenades cartesians. 
- 
-Com pots veure a la imatge, rebotar una pilota és fàcil si tens les coordenades (pos_x i pos_y) de la posició, i la trajectòria la emmagatzemes com una velocitat descomposada en component X i component Y (vel_x i vel_y , per exemple). 
- 
-Quan la pilota arriba al límit inferior o superior, només cal invertir el signe de la velocitat Y si la trajectòria semblarà exactament un rebot. 
  
 ==== Exercici ==== ==== Exercici ====
Línia 405: Línia 388:
 \\ \\
  
-===== Ortographic Camera ===== 
-Tal i com explica el tutorial del Drop Game, la ''OrtographicCamera'' ens facilitarà la traducció entre les coordenades que hem definit pel joc (o "coordenades virtuals") i les coordenades reals del dispositiu (//device//), que poden tenir dimensions diferents. A més, al treballar amb una llibreria multiplataforma, voldrem fer un sol joc a la carpeta ''core/'', i el codi de les carpetes de les plataformes (''android/'', ''ios/'', ''html/'') haurà de ser fix (no hem de repetir el joc a cada plataforma). 
- 
-Les operacions que realitzarà la càmera seran: 
-  Coordenades virtuals -> project -> Coordenades reals (//device//) 
-  Coordenades virtuals <- unproject <- Coordenades reals (//device//) 
- 
-Posant que volem una pantalla de 800x480 
- 
-<file java DesktopLauncher.java> 
-public class DesktopLauncher { 
-    public static void main (String[] arg) { 
-        Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration(); 
-        config.setWindowedMode(480, 800); 
-</file> 
- 
-A l'arxiu de ''Game'' o ''Screen'': 
- 
-<code java> 
-public final int GAME_WIDTH = 800; 
-public final int GAME_HEIGHT = 480; 
- 
-public void create() { 
-        camera = new OrthographicCamera(); 
-        camera.setToOrtho(false, GAME_WIDTH, GAME_HEIGHT); 
-         
-        //... 
-} 
-</code> 
- 
-Per fer que el ''SpritBatch'' tradueixi automàticament en totes les accions de dibuix, el configurarem a l'inici del ''render()'':  
- 
-<code java> 
-public void render() { 
-        camera.update(); 
-        spriteBatch.setProjectionMatrix(camera.combined); 
-         
-        //... 
-} 
-</code> 
- 
-Si estem capturant entrades de la pantalla, caldrà la operació contrària: ''unproject()'' 
- 
-<code java> 
-protected int virtual_joystick_control() { 
-    // iterar per multitouch 
-    // cada "i" és un possible "touch" d'un dit a la pantalla 
-    for(int i=0;i<10;i++) 
-    if (Gdx.input.isTouched(i)) { 
-        Vector3 touchPos = new Vector3(); 
-        touchPos.set(Gdx.input.getX(i), Gdx.input.getY(i), 0); 
-        // traducció de coordenades reals (depen del dispositiu) a 800x480 
-        game.camera.unproject(touchPos); 
-        // les dades convertides s'enregistren a la mateixa variable touchPos 
-        //... 
-</code> 
- 
-\\ 
  
 ===== Actors, Scenes i Skins ===== ===== Actors, Scenes i Skins =====
jocs_libgdx.1772642959.txt.gz · Darrera modificació: 2026/03/04 16:49 per enric_mieza_sanchez