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
Següent revisió Ambdós costats nova versio
jocs_libgdx [2024/04/09 16:43]
enric_mieza_sanchez [Ortographic Camera]
jocs_libgdx [2024/04/12 10:06]
enric_mieza_sanchez [Definicions]
Línia 27: Línia 27:
 buildToolsVersion "33.0.0" buildToolsVersion "33.0.0"
 </file> </file>
 +
 +\\
 +
 +===== Definicions =====
 +Objectes principals del //framework//:
 +  * ''Game'': classe principal del joc, contenidor de pantalles.
 +  * ''Screen'': hi encapsulem una pantalla (game over, presentació, etc.), nivell, minijoc. Cadascuna és independent de l'altra.
 +  * ''SpriteBatch'': objecte per pintar //sprites// (imatges, animacions).
 +  * ''ShapeRenderer'': objecte per pintar formes geomètriques (cercles, el·lipses, rectangles, triangles, etc.
 +  * ''BitmapFont'': objecte per pintar lletres.
 +  * ''Texture'': imatge.
 +  * ''TextureRegion'': fragment d'una imatge.
 +  * ''Animation'': objecte per gestionar les animacions i //spritesheets//.
 +  * ''Actor'': objecte tipus //widget//, que pot ser alhora un element gràfic i una entrada de dades. Exemples: Button, Dialog, TextInputListener, etc.
 +  * ''Stage'': objecte per renderitzar ''Actors''.
 +  * ''OrtographicCamera'': objecte per traduir coordenades. Pot servir per adaptar tamanys de pantalla o per projectar en 2D una imatge 3D.
  
 \\ \\
Línia 368: Línia 384:
  
 ===== Ortographic Camera ===== ===== 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 les coordenades reals del dispositiu, 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).+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: Les operacions que realitzarà la càmera seran:
-  Coordenades virtuals -> project -> Coordenades reals +  Coordenades virtuals -> project -> Coordenades reals (//device//) 
-  Coordenades virtuals <- unproject <- Coordenades reals+  Coordenades virtuals <- unproject <- Coordenades reals (//device//)
  
 Posant que volem una pantalla de 800x480 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> <code java>
Línia 387: Línia 412:
 } }
 </code> </code>
 +
 +Per fer que el ''SpritBatch'' tradueixi automàticament en totes les accions de dibuix, el configurarem a l'inici del ''render()'': 
  
 <code java> <code java>
Línia 396: Línia 423:
 } }
 </code> </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 =====
 +Per fer controls avançats com Buttons, Dialogs, etc. hem de tenir en compte que son elements tant de renderització com de entrada de dades, i es tracten de forma especial. En caldrà emprar els objectes ''Stage'' i ''Skin'':
 +
 +Algunes referències:
 +  * [[https://stackoverflow.com/questions/33062574/how-to-properly-implement-a-dialog-box-using-libgdx|Com fer un Dialog]].
 +  * [[https://github.com/BlueBoxWare/LibGDXPlugin|libGDX plugin per IntelliJ (Android Studio)]]
 +  * [[https://github.com/libgdx/libgdx-skins/tree/master/skins|Skins bàsics]]
 +  * [[https://github.com/czyzby/gdx-skins|Mes skins]]
 +
 +IMPORTANT: perquè funcioni el skin cal descarregar tots els arxius a la carepta assets.
 +
 +\\
  
jocs_libgdx.txt · Darrera modificació: 2024/04/12 11:52 per enric_mieza_sanchez