Bueno, explicare más o menos lo que consta mi trabajo. Es una aplicación flash, que trata de una nave que va en el espacio matando a sus enemigos.
Lo elementos de lo que consta el juego (lo que llevo) son:
Nave:

Este objeto se mueve con
las flechas del teclado.
Dispara el elemento (clip de pelicula) "disparo".
Nave Enemiga:
Tiene trayectoria aleatoria (en el eje y)

Se reproduce el elemento cada cierto
tiempo.
Disparo
Bueno ahora pondre lo codigos que use en cada uno de los elementos como en el flash. Empezare con la nave:
Nave:
onClipEvent(load)
{
function reset()
{
this._x = 100;
this._y = 150;
}
reset()
}
En la nave esta este script, se hace una uncion reset que se utilizaría por ejemplo: "Una nave enemiga choco contigo", ahi tendriamos que usar este script para volver a poner la nave en posición x = 100, y = 150.
Disparo (bala):
onClipEvent(enterFrame){
this.onEnterFrame = function()
{
this._x += 12;
if (this._x > 550)
{
this.removeMovieClip();
}
}
}
En este elemento ponemos su velocidad (desplazamiento) en el eje x que seria igual a 12 fps (corrijanme si estoy mal).
Luego se hace una comparación que podría decirse : si el disparo esta en posición mayor a los x = 550 entonces borra disparo" (o asi lo interpreto yo); esto quiere decir, que despues de hacer nuestro disparo este se desplazara cierta cantidad en x y al llegar a cierto punto (en este caso la posicion 550 en x) el elemento se borrara (no tiene caso que siga al infinito...)
Nave enemiga:
onClipEvent(load)
{
function reset()
{
var timer = 12;
this._y = Math.random() * 300
this._x = 550
mySpeed = Math.ceil(Math.random() * 6) + 1;
}
reset();
}
Primero se declara una función reset() que servirá para ubicar en cierta posición nuestra nave. Lo que hace esta función es ubicar a nuestra nave en la posición 550 (al final de nuestro flash, de ahi salen las naves...) y una posición en y aleatoria; con la linea this._y = Math.random() * 300 nuestra nave se puede posicionar en diferentes puntos en el plano y (asi da la sensación de diferentes naves saliendo en la pantalla).
Otras lineas:
onClipEvent(enterFrame)
{
this._x -= mySpeed;
if (this._x < -10) //Cuando la nave enemiga sale de la pantalla hacia la izquierda
{
reset(); //Se llama para ubicar una nave nueva
}
if (timer >= 12)
{
var dir = Math.ceil(Math.random() * 2) //variable dirección
//Aqui Math.random consigue solo numeros comprendidos entre 0 y 1, cuando lo multiplicamos por 2, Math.ceil decrementa o incrementa el valor hacia el valor más próximo (para dejar enteros), por eso en este caso solo obtendríamos números 1 y 2
timer = 0; // se iguala la variable timer a 0
}
if (dir == 1)
{
//if dir = 1,
this._y -= 3; //la nave se mueve hacia arriba
}
else if(dir == 2)
{
this._y += 3; //la nave se mueve hacia abajo
}
timer++ //incrementamos a timer 1; cuando timer sea igual a 12 obtendremos una nueva dirección
}
Flash:
var i = 0; //esta variable la utilizaremos más adelante
this.onEnterFrame = function()
{
_root["Bala" + i]._x += 25; //aquí llamo a los duplicados de mi bala, asi cuando los invoque estos tendrian una velocidad de 25 en eje x
//Aqui comienza lo del teclado:
if (Key.isDown(Key.RIGHT))//Cuando se aprieta la tecla derecha
{
if (Nave.hitTest(550, Nave._y, true))//más adelante explicare esto
{
Nave._x -= 5;
}
Ship._x += 10; //velocidad de la nave
} else if (Key.isDown(Key.LEFT))//Cuando se aprieta la tecla izquierda
{
if (Nave.hitTest(0, Nave._y, true))
{
Ship._x += 5;
}
Ship._x -= 10;//velocidad
} else if (Key.isDown(Key.UP))//cuando se aprieta la tecla arriba
{
if (Nave.hitTest(Nave._x - 40, 0, true))
{
Ship._y += 5;
}
Ship._y -= 10;
} else if (Key.isDown(Key.DOWN))//cuando se aprieta la tecla abajo
{
if (Nave.hitTest(Nave._x - 40, 300, true))
{
Ship._y -= 5;
}
Ship._y += 10;
}
if (Key.isDown(Key.SPACE))//cuando se aprieta la barra espaciadora
{
i++;//aqui incrementamos la variable "i" del principio
_root.attachMovie("Bala", "Bala" + i, _root.getNextHighestDepth());//haremos una copia de Disparo(bala) y lo ataremos a la posición de la nave
_root["Bala" + i]._x = Nave._x + 25;//posición de la bala con respecto a nuestra nave
_root["Bala" + i]._y = Nave._y;
}
}
hitTest:
Explicare lo del hitTest (que lamentablemente no he podido hacerlo funcionar en el flash).
Se utiliza el hitTest, en el caso de nuestro flash, para saber si 2 clip de pelicula estan cerca o se sobreponen, en este caso se libera una acción.
El hitTest lo podriamos usar en nuestro flash si se sobreponen la bala con la nave enemiga, en este caso podriamos pedir que se eliminara el clip de la nave enemiga, asi daría el efecto de haberla destruido.
Aqui les dejo un ejemplo del flash (que le falta, lo admito.), pero que me sirvio de mucho para aprender un poco del javascript.
La aplicación se subio a facebook con la instrucciones sacados de mi compañero Avedaño
La aplicación se hizo con respecto a un tutorial en internet Click Aqui
Cualquier duda, sugerencia o aclaración comenten.
2 comentarios:
¿Se puede probar el juego en algún lado?
Pon una liga aquí en el blog por favor para que tus lectores puedan entrar a probar. Teniendo eso, te califico el proyecto.
Publicar un comentario