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 [2024/04/09 16:43]
enric_mieza_sanchez [Ortographic Camera]
jocs_libgdx [2024/04/12 11:52] (actual)
enric_mieza_sanchez [Desenvolupament de jocs amb libGDX]
Línia 3: Línia 3:
  
 En aquest article utilitzarem una llibreria específica, libGDX per realitzar el joc. Aquesta té molts avantatges, sobretot que permet compilar en diverses plataformes (Android, Desktop, iOS, HTML). A més, ens permetrà utilitzar recursos gràfics específics que ens facilitaran operacions complexes en 2D i 3D amb acceleració OpenGL. En aquest article utilitzarem una llibreria específica, libGDX per realitzar el joc. Aquesta té molts avantatges, sobretot que permet compilar en diverses plataformes (Android, Desktop, iOS, HTML). A més, ens permetrà utilitzar recursos gràfics específics que ens facilitaran operacions complexes en 2D i 3D amb acceleració OpenGL.
- +{{ libgdx.png?250 }}
 {{tag> #FpInfor #Dam #DamMp08 #DamMp08Uf3 #DamMp08Uf03 jocs games}} {{tag> #FpInfor #Dam #DamMp08 #DamMp08Uf3 #DamMp08Uf03 jocs games}}
  
Línia 27: Línia 26:
 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.
 +  * ''OrtographicCamera'': objecte per traduir coordenades. Pot servir per adaptar tamanys de pantalla o per projectar en 2D una imatge 3D.
 +  * ''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''.
 +  * ''Skin'': conjunt de imatges i fonts per renderitzar ''Actors''. Imprescindible si es vol emprar ''Actor'' i ''Stage''.
  
 \\ \\
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.1712681025.txt.gz · Darrera modificació: 2024/04/09 16:43 per enric_mieza_sanchez