Funciones

Colisiones entre infinitos MovieClip para Juego de Disparos – Juegos Flash ActionScript

Posted on enero 12, 2007. Filed under: Array, Clases, Colisiones, Condicionales, Ejemplos Mios, Eventos, Flash, Funciones, Guias, Loop, Movie Clips, Movimiento, Objetos |

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();
      };
   }
}

Anuncios
Leer entrada completa | Make a Comment ( 17 so far )

Como detectar cuando se pulsa una tecla teclado o key con add Listener

Posted on diciembre 27, 2006. Filed under: Condicionales, Eventos, Flash, Funciones, Guias, Objetos |

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

Leer entrada completa | Make a Comment ( 2 so far )

Como Ejecutar una Funcion con un Evento

Posted on diciembre 14, 2006. Filed under: Eventos, Flash, Funciones |

Hay dos formas para hacerlo.
1.

algunObjeto.algunGestorEvento = funcion (){
declaraciones
};

2.

algunObjeto.algunGestorEvento = algunaFuncion;

y luego hay que tener en algun sitio la funcion que este evento ejecuta

funcion algunaFuncion (){
declaraciones
}

Leer entrada completa | Make a Comment ( None so far )

Funciones Literales

Posted on diciembre 13, 2006. Filed under: Flash, Funciones |

Su estructura es:

Evento Identificador o Objeto = function (parametro1, parametro2,etc…){declaraciones};

Las características de las Funciones Literales son:

  • No tienen Nombre
  • Termina con un ;
  • Si no se almacena la función literal se pierde y no se puede recuperar después
  • Para almacenarla hay que asignarle una variable en el identificador
  • Cuando se guarda una funcion literal con una variable, para invocar esta variable con función hay que utilizar (variable());

Las Funciones Literales son muy útiles para invocar funciones a través de eventos como con click izquierdo.

ruta.onRelease = function (){
declaracion
};

También sirven para crear funciones globales mediante una variable global.

_global.variable = function (){
declaración;
};

Leer entrada completa | Make a Comment ( 2 so far )

Ejecutar una Funcion con un Clip del Mouse

Posted on diciembre 13, 2006. Filed under: Eventos, Flash, Funciones, Linea de Tiempo |

Después de muchas pruebas, la uncia forma en la que he logrado hacer que se ejecute una función que se pueda aplicar a cualquier tipo de objeto en la pelicula es la siguiente.

function click (objeto){
objeto.onPress = function (){
objeto._x += 20;
};
}
click (rojo);
click (amarillo);

Lo que hace esta función es mover 20 px la posición de un movie clip cualquier en la película.

acá creamos una función con el nombre click y creamos un parámetro llamado objeto, que luego se le colocara el nombre del movie clip.
Luego le decimos que a pulsar objeto se ejecutara la una función que haga que objeto se mueva 20 Px horizontalmente.
La declaración objeto._x += 20; se puede remplazar con cualquier otra declaración.

Luego le decimos que toda la función click sea ejecutada, y que remplace la palabra objeto por rojo y luego por amarillo. Esto hace que toda la función click se aplique a un movie clip que tenga el nombre rojo o amarillo.

En definitiva, es una función dentro de otra función.

Leer entrada completa | Make a Comment ( None so far )

Con Accion modificar variable – Function()

Posted on noviembre 29, 2006. Filed under: Eventos, Flash, Funciones |

Esta función sirve para modificar una variable con una accion como por ejemplo “onRelease”. Cuando trate de hacerlo sin function() no me funciono.

Boton2.onRelease = function() {
Variable1 = 20;
}

Actualizacion: Ya se bien como funciona esto. Lo que hacemos es decirle que cuando pulsemos sobre Boton2 se ejecute una función literal que le da el valor de 20 a la variable Variable1

Leer entrada completa | Make a Comment ( None so far )

Las Funciones o function – Retornar o return

Posted on noviembre 24, 2006. Filed under: Flash, Funciones |

Codigo Malo, y por que son útiles las funciones

var ancho1 = 21;
var alto1 = 32;
trace (ancho1*alto1);
var ancho2 = 10;
var alto2 = 2;
trace (ancho2*alto2);
var ancho3 = 7;
var alto3 = 80;
trace (ancho3*alto3);

Lo que quiero hacer es, sacar el area de 3 habitaciones. Para eso lo que hago es; creo la variable ancho1 y le doy el valor de 21, luego creo la variable alto1 y le doy varlo de 32. Luego le digo que dibuje la multiplicacion de ancho1 X alto1. Este codigo lo repito por 3 para sacar las 3 areas. Resultado 672, 20, 560.

Codigo Bonito y como funcionan las funciones

function area(ancho, alto) {
return ancho * alto;
}
var cuarto1 = area(21, 32);
var cuarto2 = area(10, 2);
var cuarto3 = area(7, 80);
trace (cuarto1);
trace (cuarto2);
trace (cuarto3);

Aca necesito hacer lo mismo. Lo que hago es; creo una accion (funcion) a la que llamo “area”. A esta accion (funcion) lo que le digo es que cree la variable ancho y alto pero no les doy valor. Luego le digo, que el resultado (return) de esta accion (funcion) es multiplicar la variable ancho y alto sea cual fuere su valor. Osea, el resultado final (return) de esa accion (funcion) debe ser la multiplicacion de ancho por alto sea cual fuere su valor.

Luego creo una variable llamada cuarto1 cuyo valor va ser la accion (funcion) que cree antes llamada area y le indico que en cuarto1 el valor de la variable ancho es 21 y de alto es 32. Luego le digo que dibuje la variable cuarto1 y repito este procedimientos con los dos siguientes cuadros. Resultado 672, 20, 560.

return Termina cierra abaca la funcion

Cuando utilizamos return lo que se coloque despues no vale. Al utilizar return se cirra la funcion. En el ejemplo siguiente el trace no se hace porque va despues de return

function nombre (){
return;
trace (“Hola Mundo”);
}

function nombre (){
return;
trace ("Hola Mundo");
}

Leer entrada completa | Make a Comment ( 2 so far )

Liked it here?
Why not try sites on the blogroll...