Tutorial 10 - Creación de un juego (II)

Paso 9 de 22

Para convertir las minas en obstáculos contra los que debemos evitar chocar, añadiremos un detector a cada mina, para que evalúe en cada momento si está chocando con la nave.

Para ello añadimos en primer lugar un listener para cada mina en el mismo bucle que utilizamos para crearlas, dentro por tanto de la función putMines y dentro del bucle for, y antes de añadir las minas al escenario con addChild.

mine.addEventListener(Event.ENTER_FRAME, enemy);

La nueva función, a la que hemos llamado enemy, comprobará si cada mina a la que hemos añadido el listener choca con la nave en algún momento. Si choca, entonces ejecutaremos la función gameOver, con el parámetro "lose".

function enemy(e:Event):void
{
    if (e.target.hitTestObject(spacecraft_mc)) 
    {
        gameOver("lose");
    }
}

Si probamos ahora nuestro juego, tanto si ganamos como si perdemos, nos aparecerá un error debido a que, a pesar de que no hay ninguna nave, la función enemy seguirá comprobando si cada mina choca con la nave. Al no encontrar ninguna nave en el escenario se mostrará el error.

Por tanto, lo primero que debemos hacer en la función gameOver, antes de la orden de ir a otro fotograma en el que no esté la nave, es eliminar los listeners que hemos añadido a las minas. A la vez que eliminamos cada listener, aprovecharemos para eliminar las minas del escenario. En el siguiente paso mostraremos cómo hacerlo.

El escenario (stage) funciona como un contenedor que contiene en primer lugar la línea de tiempo, y contiene también cada mina que le hemos ido añadiendo con addChild. Después de crear todas las minas, el escenario tendrá 11 elementos secundarios. El primero, en el nivel inferior de visualización (nivel 0), será la línea de tiempo. Después estarán todas las minas, cada una en un nivel superior a la anterior.

La cantidad de minas creadas depende del valor que hayamos dado a numMines. La última mina creada se mostrará por tanto en un nivel de visualización que coincide con numMines.