Tutorial 9 - Creació d'un joc (I)

Pas 9 de 26

Volem que la nau giri i es desplaci quan premem les fletxes del teclat, així que el primer pas serà convertir la nau en un detector d'esdeveniments del teclat.

Programem que, quan es detecti una pulsació de tecla, s'executi una funció a la qual anomenarem arrows. La manera d'afegir un esdeveniment de teclat és similar al que hem vist fins ara.

spacecraft_mc.addEventListener(KeyboardEvent.KEY_DOWN, arrows);

function arrows(e:KeyboardEvent):void
{
    trace("I pressed a key");
}

Amb aquesta programació diem a la nau que, quan detecti que s'ha premut una tecla, executi una funció anomenada arrows. Aquesta funció, que rep un esdeveniment de teclat, té al seu torn l'ordre d'escriure en el panell Salida la frase I pressed a key.

No obstant això, si provem la pel·lícula i premem les fletxes del teclat no passarà res.

Això es deu al fet que, perquè funcioni un detector d'esdeveniments de teclat, l'objecte encarregat de detectar-los ha de rebre el focus de la pel·lícula, és a dir, ha d'estar seleccionat. Per a seleccionar-lo, a l'inici de la programació afegim el codi següent:

stage.focus = spacecraft_mc;

Ara que la nau té el focus, detectarà les pulsacions del nostre teclat, i després de cada pulsació escriurà la frase que havíem posat en el trace. Quan estem en fase de proves, és possible que aquesta detecció no funcioni amb les tecles que tinguem en Flash com a mètodes abreujats de teclat. És per això que en la fase de proves també ens limitarem a les fletxes del teclat.

Com que ara la nau té el focus, podem veure que apareix un rectangle al voltant de la nau per a indicar que té el focus. Perquè no aparegui aquest rectangle, abans de donar el focus a la nau afegirem una sentència que especifiqui que, encara que la nostra nau tingui el focus, no mostri un rectangle. Les dues primeres línies de la nostra programació quedaran així:

spacecraft_mc.focusRect = false;
stage.focus = spacecraft_mc;