Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
libgdx_viewport [2026/03/05 19:58] enric_mieza_sanchez [Dibuixem!] |
libgdx_viewport [2026/03/05 23:04] (actual) enric_mieza_sanchez [Movem l'objecte] |
||
|---|---|---|---|
| Línia 40: | Línia 40: | ||
| // pintem! | // pintem! | ||
| batch.begin(); | batch.begin(); | ||
| - | //... | + | // ...instruccions de dibuix... |
| batch.end(); | batch.end(); | ||
| } | } | ||
| Línia 54: | Línia 54: | ||
| public void dispose() { | public void dispose() { | ||
| batch.dispose(); | batch.dispose(); | ||
| - | font.dispose(); | ||
| } | } | ||
| } | } | ||
| Línia 125: | Línia 124: | ||
| \\ | \\ | ||
| + | |||
| + | ===== Movem l' | ||
| + | |||
| + | Per moure l' | ||
| + | |||
| + | Recordem que el loop típic dels jocs consisteix en: | ||
| + | - Inputs: processar controls de l' | ||
| + | - Calcular objectes | ||
| + | - Pintar objectes | ||
| + | |||
| + | <code java> | ||
| + | public class Joc extends ApplicationAdapter { | ||
| + | // ... | ||
| + | |||
| + | // les dades mínimes son posició i velocitat de la pilota | ||
| + | float posx, posy, velx, vely; | ||
| + | |||
| + | @Override | ||
| + | public void create() { | ||
| + | // ... | ||
| + | |||
| + | posx = posy = 0f; | ||
| + | velx = vely = 1f; // velocitat d'1 m/s | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void render() { | ||
| + | // 1- INPUTS (controls usuari)... | ||
| + | |||
| + | // 2- CALCULEM | ||
| + | // primera prova: increment 0.01mts per iteració | ||
| + | posx = posx + 0.01; | ||
| + | |||
| + | // 3- PINTEM | ||
| + | // projecció viewport, background, etc... | ||
| + | batch.begin(); | ||
| + | batch.draw(pilotaTexture, | ||
| + | batch.end(); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | Si proves el codi veuràs que la pilota avança poc a poc. | ||
| + | |||
| + | Però no hem fet servir la velocitat real '' | ||
| + | <code java> | ||
| + | posx = posx + velx; | ||
| + | </ | ||
| + | |||
| + | Què succeeix? | ||
| + | |||
| + | Si ho feu així veureu que la pilota no avança a 1 m/s, sinó que avança 1 metre per iteració. I els ajustos habituals solen ser de 30 FPS, per tant, la velocitat que ara estem executant és de 30 m/s, segurament ni l'heu vist passar !!! | ||
| + | |||
| + | Perquè la pilota avanci a 1 m/s de veritat (hauria de trigar 8 segons en travessar la pantalla) hauríem de fer el següent: | ||
| + | |||
| + | <code java> | ||
| + | public void render() { | ||
| + | // 1- INPUTS (controls usuari)... | ||
| + | |||
| + | // 2- CALCULEM | ||
| + | float delta = Gdx.graphics.getDeltaTime(); | ||
| + | posx = posx + velx * delta; | ||
| + | | ||
| + | // ... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <WRAP info> | ||
| + | **En termes físics** | ||
| + | |||
| + | En termes de física, les sumes han de ser de la mateixa magnitud, és a dir, a la posició x [metres] no podem sumar-li una velocitat [m/s], sinó que cal sumar-li un desplaçament també en [metres]. | ||
| + | |||
| + | posx = posx + velx; | ||
| + | |||
| + | {{mdi> | ||
| + | |||
| + | Quant és el desplaçament que cal aplicar-li a posx? Doncs dependrà del temps que hagi passat. Podriem calcular-ho en base als FPS, però tenim una manera millor encara, demanar-li a libGDX que ens digui el temps que ha passat des del darrer '' | ||
| + | float delta = Gdx.graphics.getDeltaTime(); | ||
| + | </ | ||
| + | |||
| + | Ara podrem calcular el desplaçament: | ||
| + | posx = posx + velx * delta; | ||
| + | |||
| + | Que en magnituds serà: | ||
| + | |||
| + | {{mdi> | ||
| + | |||
| + | Ara sí! | ||
| + | </ | ||
| + | |||