Tutorial 10 - Creació d'un joc (II)
Pas 9 de 22
Per convertir les mines en obstacles contra els quals hem d'evitar xocar, afegirem un detector a cada mina, perquè avaluï en cada moment si està xocant amb la nau.
Per a això afegim en primer lloc un listener per a cada mina en el mateix bucle que utilitzem per a crear-les, dins, per tant, de la funció putMines
i dins del bucle for
, i abans d'afegir les mines a l'escenari amb addChild
.
mine.addEventListener(Event.ENTER_FRAME, enemy);
La nova funció, que hem anomenat enemy
, comprovarà si cada mina a la qual hem afegit el listener xoca amb la nau en algun moment. Si hi xoca, llavors executarem la funció gameOver
, amb el paràmetre "lose"
.
function enemy(e:Event):void
{
if (e.target.hitTestObject(spacecraft_mc))
{
gameOver("lose");
}
}
Si ara provem el nostre joc, tant si guanyem com si perdem, ens apareixerà un error perquè, malgrat que no hi ha cap nau, la funció enemy
continuarà comprovant si cada mina xoca amb la nau. En no trobar cap nau en l'escenari, es mostrarà l’error.
Per tant, el primer que hem de fer en la funció gameOver
, abans de l'ordre d'anar a un altre fotograma en el qual no hi hagi la nau, és eliminar els listeners que hem afegit a les mines. Alhora que eliminem cada listener, aprofitarem per eliminar les mines de l'escenari. En el pas següent mostrarem com fer-ho.
L’escenari (stage
) funciona com un contenidor que conté en primer lloc la línia de temps, i que també conté cada mina que li hem anat afegint amb addChild
. Després de crear totes les mines, l'escenari tindrà 11 elements secundaris. El primer, en el nivell inferior de visualització (nivell 0), serà la línia de temps. Després hi haurà totes les mines, cada una en un nivell superior a l'anterior.
La quantitat de mines creades depèn del valor que hàgim donat a numMines
. Per tant, l'última mina creada es mostrarà en un nivell de visualització que coincideix amb numMines
.