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 22:34] enric_mieza_sanchez [Movem l'objecte] |
libgdx_viewport [2026/03/06 00:05] (actual) enric_mieza_sanchez [Configuració Viewport bàsica] |
||
|---|---|---|---|
| Línia 35: | Línia 35: | ||
| // pintem background de color | // pintem background de color | ||
| ScreenUtils.clear(0.15f, | ScreenUtils.clear(0.15f, | ||
| + | | ||
| // PUNT CLAU: ajustem càmera per traduir resolucions quan pintem | // PUNT CLAU: ajustem càmera per traduir resolucions quan pintem | ||
| viewport.apply(); | viewport.apply(); | ||
| batch.setProjectionMatrix(viewport.getCamera().combined); | batch.setProjectionMatrix(viewport.getCamera().combined); | ||
| + | | ||
| // pintem! | // pintem! | ||
| batch.begin(); | batch.begin(); | ||
| - | // ...instruccions de dibuix... | + | // ...instruccions de dibuix |
| batch.end(); | batch.end(); | ||
| } | } | ||
| Línia 155: | Línia 157: | ||
| // 2- CALCULEM | // 2- CALCULEM | ||
| // primera prova: increment 0.01mts per iteració | // primera prova: increment 0.01mts per iteració | ||
| - | posx += 0.01; | + | posx = posx + 0.01; |
| // 3- PINTEM | // 3- PINTEM | ||
| // projecció viewport, background, etc... | // projecció viewport, background, etc... | ||
| batch.begin(); | batch.begin(); | ||
| - | batch.draw(pilotaTexture, | + | batch.draw(pilotaTexture, |
| batch.end(); | batch.end(); | ||
| } | } | ||
| Línia 171: | Línia 173: | ||
| Però no hem fet servir la velocitat real '' | Però no hem fet servir la velocitat real '' | ||
| <code java> | <code java> | ||
| - | posx += velx; | + | posx = posx + velx; |
| </ | </ | ||
| Què succeeix? | 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 !!! | + | 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: | 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: | ||
| Línia 186: | Línia 188: | ||
| // 2- CALCULEM | // 2- CALCULEM | ||
| float delta = Gdx.graphics.getDeltaTime(); | float delta = Gdx.graphics.getDeltaTime(); | ||
| - | posx += velx * delta; | + | 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í! | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | ===== Rebots ===== | ||
| + | |||
| + | Per poder fer rebotar la pilota a les parets, caldrà tenir descomposta la velocitat en les components X i Y : '' | ||
| + | * Canviem el signe (multiplicar per -1) de '' | ||
| + | * Canviem el signe (multiplicar per -1) de '' | ||
| + | |||
| + | ULL: aquest gràfic té la coordenada Y invertida (moltes interfícies gràfiques tenen l' | ||
| + | |||
| + | {{Pilota-rebots.png}} | ||
| + | |||
| + | |||
| + | <WRAP todo> | ||
| + | Fes els següents exercicis: | ||
| + | - Actualitza també el valor de '' | ||
| + | - Implementa els rebots: introdueix codi per controlar els límits i inverteix el signe de les velocitats x i y com s'ha explicat. | ||
| + | - Rebota bé en els límits? Fes els ajustos adequats perquè reboti de forma correcta. | ||
| + | |||
| + | Potser t' | ||
| + | viewport.getWorldWidth() | ||
| + | viewport.getWorldHeight() | ||
| + | |||
| + | </ | ||
| + | |||