bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


jocs_android

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_android [2018/12/20 19:32]
enric_mieza_sanchez
jocs_android [2021/09/29 09:40] (actual)
Línia 2: Línia 2:
  
 Ens basarem en els [[https://ioc.xtec.cat/materials/FP/Materials/2252_DAM/DAM_2252_M08/web/html/index.html|apunts de M8 de la IOC]]. Ens basarem en els [[https://ioc.xtec.cat/materials/FP/Materials/2252_DAM/DAM_2252_M08/web/html/index.html|apunts de M8 de la IOC]].
 +
 +{{tag> #FpInfor #Dam #DamMp08 #DamMp08Uf3 #DamMp08Uf03}}
 +
  
 Per introduir-nos als jocs en Android podem començar pel [[https://ioc.xtec.cat/materials/FP/Materials/2252_DAM/DAM_2252_M08/web/html/WebContent/u4/a1/activitats.html|tutorial de la IOC per moure una bola amb el sensor del acceleròmetre]]. Per introduir-nos als jocs en Android podem començar pel [[https://ioc.xtec.cat/materials/FP/Materials/2252_DAM/DAM_2252_M08/web/html/WebContent/u4/a1/activitats.html|tutorial de la IOC per moure una bola amb el sensor del acceleròmetre]].
Línia 10: Línia 13:
 ==== Pilota rebotant ==== ==== Pilota rebotant ====
  
-  - Comença un nou projecte i pinta una pilota de forma similar en com has fet al projecte anterior.+  - Comença un nou projecte i pinta una pilota de forma similar en com has fet al projecte anterior, amb un ''ImageView'' sobre un ''RelativeLayout''.
   - Implementa un ''Android Timer'' (és similar als //timers// de Java, però la llibreria és una mica diferent. Necessitaràs un Timer + TimerTask.   - Implementa un ''Android Timer'' (és similar als //timers// de Java, però la llibreria és una mica diferent. Necessitaràs un Timer + TimerTask.
   - Sobreescriu el mètode ''TimerTask.run'' i fes que la posició X i Y de la ''ImageView'' es vagi incrementant.   - Sobreescriu el mètode ''TimerTask.run'' i fes que la posició X i Y de la ''ImageView'' es vagi incrementant.
   - Detecta quan la bola arriba als límits i fes-la rebotar, canviant la seva velocitat X o Y. Per veure com detectar els límits pots fer un cop d'ull al codi que hem fet en la pràctica inicial.   - Detecta quan la bola arriba als límits i fes-la rebotar, canviant la seva velocitat X o Y. Per veure com detectar els límits pots fer un cop d'ull al codi que hem fet en la pràctica inicial.
 +    - Si veus que no rebota en els límits exactes segurament serà perquè has de tenir en compte el tamany de la bola. Aplica una correcció a la detecció de límits.
 +  - Si vols que els límits siguin exactes, hauràs de tenir en compte la ''ActionBar''. Pots:
 +    - Calcular el seu tamany i compensar el límit similarment en com has fet amb les dimensions de la bola.
 +    - Amagar-la (hide). En el cas que al voler amagar-la la aplicació falli, mira d'accedir a la ''SupportActionBar'' enlloc de la ''ActionBar''.
 +
 +
 +==== Millorant model per disposar de diverses boles ====
 +L'objectiu ara serà crear diverses boles a la pantalla i que es moguin lliurement amb diferents velocitats. Per a dur-ho a terme, pensa que:
 +
 +  - Necessites pensar bé l'objecte ''Bola'' perquè contingui els atributs necessaris independents a cada instància.
 +  - Hauràs de crear un ArrayList de <Bola> enlloc de tenir una de sola.
 +  - Has d'associar una ''ImageView'' a cada objecte ''Bola'', i NO el pots crear des del GUI del IDE. Busca com crear una ''ImageView'' **programàticament** (//programmatically//) i afegir cadasuna d'elles al //layout// principal de l'aplicació.
 +  - El ''Timer'' ara haurà d'actualitzar la posició de cadascuna de les boles.
 +  - Fes que cada bola tingui una imatge diferent.
 +  - Intenta canviar el tamany de la boles (per exemple, passats 5 segons o després de 1000 repintades). Què passa? Quin error dona?
 +  - Intenta canviar el tamany de les boles quan arribi un //touch event// qualsevol. Funciona ara? Perquè?
 +
 +==== Col·lisions ====
 +Ja has fet algo similar a les col·lisions quan has controlat el rebot de la pilota als límits de la pantalla. Ara volem extendre aquest fenomen i fer que les pilotes col·lisionin entre sí.
 +
 +Tingues en compte que:
 +  - Ens caldrà un mètode ''intersecta'' a l'objecte bola, i que ens dirà si s'està tocant amb una altra bola. Pots simplificar el model de la bola i pensar que és un quadrat que va de (x,y) a (x+w,y+h). Si els dos quadrats de les boles s'intersecten és que hi ha col·lisió.
 +  - Quan detectem una col·lisió, hauríem de saber per quin costat ha succeït. De moment simplifiquem per tenir una aproximació, i simplement canviem el signe (multipliquem per -1) de la velocitat X.
 +  - Ara estem efectuant la col·lisió un cop s'ha produït. De vegades això pot provocar efectes estranys. Seria millor canviar les velocitats //abans// que succeeixi la col·lisió. Potser convindria un mètode per precalcular el següent estat de la pilota i calcular la col·lisió en l'instant següent, i no aquest.
 +  - Pensa alguna manera de preveure si per quin costat serà la col·lisió, i quina velocitat de la pilota cal afectar en el rebot, si la Vx o la Vy.
  
  
jocs_android.1545334336.txt.gz · Darrera modificació: 2018/12/20 19:32 per enric_mieza_sanchez