Objetos
Colisiones entre infinitos MovieClip para Juego de Disparos – Juegos Flash ActionScript
Bueno, ya conseguí hace mi primer juego de disparos aca esta el link
Aca el los archivos fuente. Aunque hay que actualizarlos con este codigo
El problema de hacer un juegos con infinitos disparos y enemigos, es como asignar los nombres para efectuar las colaciones. No sabia como hacerlo al comienzo, pero pregunte en cristalab me ayudaron y lo termine. Aca el post
El código es este
Película principal
Código Película principal :
////////// Inicio Muros
// Crea la Array que va a guardar los nombres de todas las rocas que caen
var MiArray:Array = new Array();
// Variable que nos sirve de contador para que cada nuevo clip tenga nombre nuevo
var contaMuros:Number = 0;
// Funcion que hace que apareca un nuevo Muro en la pelicula
function crearMuros() {
// Cada vez que se ejecuta la funcion crearMuros se aumenta en 1 el contador
contaMuros++;
// Agrega en la ultima posicion de la array un attachMovie y queda como valor el nombre de el mouro.
// El movieClip id_muro sirve de padre de todas las rocas. Hereda las propiedades de la Clase Muro.as
_root.MiArray.push(_root.attachMovie("id_muro", "muro"+contaMuros, getNextHighestDepth()));
}
// Intervalo que hace que se ejecute la funcion crearMuros
var miInterval:Number = setInterval(crearMuros, 500);
////////// Fin Muros
////////// Inicio Laser
// Variable que nos sirve de contador para que cada nuevo clip tenga nombre nuevo
var contaLaser:Number = 0;
this.boton.onPress = function() {
// Cada vez que se pulsa el boton se aumenta en 1 contaLaser
contaLaser++;
// Agrega un laser en la pelicula. Este larser hereda todas las propiedades de la Clase Laser.as
_root.attachMovie("id_laser", "laser"+contaLaser, getNextHighestDepth());
};
////////// Fin Laser
////////// Inicio Explosion y Puntaje
// Funcion que hace que aparesca la explosion. Se activa cuando hay una colisión.
// Cada vez que explota cambia el puntaje
_global.contaExplosion = 0;
function Explosion() {
// Variable que nos sirve de contador para que cada nuevo clip tenga nombre nuevo
contaExplosion++;
_root.attachMovie("id_explosion", "explosion"+contaExplosion, getNextHighestDepth(), {_y:115, _x:350});
// Hay un texto dinamico con variable llamada Puntaje.
Puntaje = "Puntos: "+(contaExplosion*20);
}
////////// Fin Explosion y Puntaje
////////// Inicio Cronometro
// Esto hace que el juego dure 15 segundos.
var Cronometro:Number = 15;
// Funcion que se repetira cada 1000 milisegundos osea 1 segundo
function cuentaAtras() {
// Cada vez que se ejectua esta funcion se le resta 1 a el Cronometro
Cronometro--;
// cuando la variable cronometro llega a 0 para los muros y va al frame 3
if (Cronometro<0) {
_root.gotoAndStop(3);
clearInterval(miInterval);
}
// Esto hace que aparesca el tiempo en un texto dinamico
tiempo = "Tiempo: "+Cronometro;
}
var Reloj:Number = setInterval(cuentaAtras, 1000);
////////// Fin Cronometro
Código Clase laser Laser.as :
// Importa la clase Tween que nos va a servir para darle movimiento a la bala
import mx.transitions.Tween;
// La Clase Laser hereda las propiedades del objeto MovieClip, para que pueda hacer todas las cosas que
// hace un MovieClip y no de error. Esta Clase la hereda el MovieClip id_laser en la película principal desde la biblioteca
class Laser extends MovieClip {
// Funcion Constructora. Se ejecuta cuando el MovieClip que hereda esta clase se crea con un attachMovie
function Laser() {
// Posicion vertical
this._y = 115;
// Este codigo hace que el disparo se mueva.
var miDisparo:Tween = new Tween(this, "_x", mx.transitions.easing.None.easeNone, 70, 500, 15, false);
// variable que ayuda a que no se pierda la referencia de this en las siguientes funciones.
var scope = this;
// un evento de la clase Tween que ejecuta un codigo cuando el movimiento termina el recorrido.
// Parecido a enterFrame
miDisparo.onMotionFinished = function():Void {
// Cuando termina el recorrido el Movieclip, este es eliminado
scope.removeMovieClip();
};
// un evento de la clase Tween que ejecuta un codigo cuando el movimiento se esta produciendo. Parecido a enterFrame
miDisparo.onMotionChanged = function():Void {
// Este pedazo es la razon de este post y la parte mas dificil. Asi que veneradlo. Si lees el post entenderas este pedazo
// Cada vez que nace un muro, este deja el registro de su nombre en la array MiArray.
// Y cada vez que un muro es eliminado o termina su recorrido, su nombre tambien es eliminado de la array.
// Cada vez que nace un laser, este revisa todos los muros que hay en la pelicula,
// revisando todos los datos que hay en la array MiArray.
for (var i:Number = 0; i<_root.MiArray.length; i++) {
if (scope.hitTest(_root.MiArray[i])) {
// Si choca contra algun movieClip que tenga el nombre archivado en la Array MiArray
// de la pelicula principal, el movieClip que herede esta clase se elimina
scope.removeMovieClip();
// elimina tambien la roca con la que choco
_root.MiArray[i].removeMovieClip();
// ejecuta la funcion Explosion de la pelicula principal. Esta funcion hace que salga la explosion
_root.Explosion();
}
}
};
}
}
Código Clase Muro Muro.as:
// Lo mismo que la Clase Laser :)
import mx.transitions.Tween;
class Muro extends MovieClip {
public function Muro() {
this._x = 342;
var miDisparo:Tween = new Tween(this, "_y", mx.transitions.easing.None.easeNone, -35, 200, 25, false);
var scope = this;
miDisparo.onMotionFinished = function() {
scope.removeMovieClip();
// Cuando una roca termina su recorrido, elimina el primer elemento de la array, Osea, el nombre del MovieClip que heredo esta clase
_root.MiArray.shift();
};
}
}
Como detectar cuando se pulsa una tecla teclado o key con add Listener
Para hacer que se ejecute una acción cuando se pulsa una tecla, debemos crear un objeto que nos servirá de receptor de un aviso que le enviara la funcion addListener .
Cuando este objeto reciba la notificación podrá hacer cualquier cosa. Pero esta notificación solo dice que se a pulsado una tecla. Para saber que tecla se a pulsado, el objeto debe tener una función que compruebe que tecla se esta pulsado y según sea el caso, hacer lo que se deba.
Ejemplo:
Creamos un nuevo objeto que nos va a servir para detectar cuando se pulse una tecla
var objetoDetector = new Object();
Decimos que mande una notificación cuando se pulse una tecla, al objeto que creamos antes con addListener
Key.addListener(objetoDetector);
Decimos que cuando se pulse una tecla compruebe si la tecla pulsada es SPACE entonces escriba Hola Mundo
objetoDetector.onKeyDown = function(){
if (Key.isDown(Key.SPACE)){
trace («Hola Mundo»);
}
}
var objetoDetector = new Object();
Key.addListener(objetoDetector);
objetoDetector.onKeyDown = function(){
if (Key.isDown(Key.SPACE)){
trace (”Hola Mundo”);
}
}
Mas sobre esto en Cristalab
Metodos en Clases
Se crea la CLASE de objeto «Pantufla» mas el parámetro propiedad olor mas los parametros valor color cantidad
function Pantufla(olor){
this.olor=olor;
}
Se crea el METODO «unMetodo«, en la CLASE de objeto «Pantufla». La palabra clave para crear un METODO es la palabra prototype
Pantufla.prototype.unMetodo = function (saludo,despedir){
trace (saludo + «. Mi pantufla tienen un olor » + miPantufla.olor + despedir);
}
Se crea una pantufla (INSTANCIA) llamada «mPantufla»
var miPantufla = new Pantufla («Asqueroso»);
Se invoca el METODO descripcion en la INSTANCIA «miPantufla»
miPantufla.descripcion («Hola»,». Chao»);
Resultado:
Hola. Mi pantufla tienen un olor Asqueroso. Chao
Otro Ejemplo
function Pantufla(olor,valor,color,cantidad){
this.olor=olor;
this.valor=valor;
this.color=color;
this.cantidad=cantidad;
}
Pantufla.prototype.ganancia = function(){
return this.valor * this.cantidad;
}
var miPantufla = new Pantufla(«Asqueroso»,2000,»Negras»,20);
trace (miPantufla.ganancia());
resultado
Read Full Post | Make a Comment ( None so far )40000
Clases Objetos Propiedades y Instancias
Creamos una Clase llamada Pelota y la damos unas propiedades.
function Pelota(){
this.Tamaño = «Grande»;
this.Color = «Verde»;
this.Posicion = 20;
this.Cantidad = 4;
}
Creamos una nueva instancia de la Clase Pelota, llamada botePelota
var botePelota = new Pelota();
Le decimos que nos de la propiedades la instancia botePelota
trace («Tamaño es «+botePelota.Tamaño);
trace («Color es «+botePelota.Color);
trace («Posicion es «+botePelota.Posicion);
trace («Cantidad es «+botePelota.Cantidad);
Resultado
Tamaño es Grande
Color es Verde
Posicion es 20
Cantidad es 4
También podemos hacerlo con parametros
function Pelota (Tamaño,Color,Posicion,Cantidad){
this.Tamaño = Tamaño;
this.Color = Color;
this.Posicion = Posicion;
this.Cantidad = Cantidad;
}var pelotaVerde = new Pelota(«Mediano»,»Verde»,32,1);
var pelotaBlanca = new Pelota(«Pequeña»,»Blanca»,500,5);trace (pelotaVerde.Color);
trace (pelotaBlanca.Color);
Resultado
Read Full Post | Make a Comment ( None so far )Verde
Blanca
Utilizar for in para descubrir todas las propiedades de los objetos
var pelota= new Object();
pelota.radio=50;
pelota.color=»Rojo»;for (var asdf in pelota){
trace («Propiedad «+ asdf +» tiene el valor » +pelota[asdf]);
}
Resultado
Propiedad color tiene el valor Rojo
Propiedad radio tiene el valor 50
En este codigo lo que hacemos primero es crear un nuevo objeto llamado pelota con var pelota= new Object(); Luego a este objeto pelota le creamos dos propiedades. una radio pelota.radio y otra color pelota.color . a color le damos el valor de 50; y a color el valor «Rojo»;
Luego le decimos que haga una lista de las propiedades de pelota diciéndolefor for (var asdf in pelota){
trace («Propiedad «+ asdf +» tiene el valor » +pelota[asdf]);
}
Aca asdf se puede sustituir por cualquier cosa, esa valor no importa.
Read Full Post | Make a Comment ( None so far )