Foros del Web » Creando para Internet » Flash y Actionscript »

mover varios clips

Estas en el tema de mover varios clips en el foro de Flash y Actionscript en Foros del Web. Buenas, estoy creando un minijuego y me surge el problema de que cuando el protagonista dispara, voy agregando las balas en un array: Código: public ...
  #1 (permalink)  
Antiguo 29/06/2011, 05:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 15 años, 6 meses
Puntos: 3
mover varios clips

Buenas,

estoy creando un minijuego y me surge el problema de que cuando el protagonista dispara, voy agregando las balas en un array:

Código:
public var army:Array; //creo la variable en la classe, de la bala y el array.

public var bala:DisplayObject;	

stage.addEventListener( MouseEvent.CLICK, Disparar ); //activa la funcion de disparo.


                army = new Array();
		bala = new Pistola(); //la clase del arma
		bala.x = pj.x;
		bala.y = pj.y;
		bala.rotation = pj.rotation;
		
		balaVel.x = Math.cos(bala.rotation);
		balaVel.y = Math.sin(bala.rotation);
		army.push( bala );
		addChild(bala);


//entonces en un timer event cada cierto tiempo ejecuto:

 for each ( var bala:Pistola in army ) 
        {
               bala.x += balaVel.x;
				bala.y += balaVel.y;
				
                      }
Ahora bien, al pulsar el raton todo bien, sale la bala y se mueve, pero al volverlo a pulsar, la primera bala se queda quieta y se mueve solo la ultima...



PD: TEngo otro problema que si me pudierais ayudar a solucionarlo.. El personaje rota con el raton, y ya ocnsegui que la bala saliera tambien con la rotacion correcta, el fallo es que no se dirije hacia delante...
Esta claro que el fallo esta en:

Código:
       balaVel.x = Math.cos(bala.rotation);
		balaVel.y = Math.sin(bala.rotation);
Pero He buscado y buscado y no me sale...

GRacias de nuevo
  #2 (permalink)  
Antiguo 29/06/2011, 15:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 232
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: mover varios clips

NADA? pensaba que seria un errror tonto

Última edición por phyronx; 29/06/2011 a las 17:27
  #3 (permalink)  
Antiguo 29/06/2011, 17:51
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 11 meses
Puntos: 43
Respuesta: mover varios clips

Hola phyronx !

Quien tiene paciencia, obtendrá lo que desea.

Pasando de lleno al tema:

El problema es el bucle foreach, recorres el arreglo por cada clic en el escenario y mueves la posición de cada bala, pero eso sólo pasa en cada clic, para lograr el movimiento continuo tienes que utilizar el evento ENTER_FRAME que se notifica cada X veces por segundo dependiendo de como tengas configurado los FPS de la película, si lo tuvieras en 12fps, el evento se llamaría 12 veces por segundo.

Ahora para calcular la trayectoria de la bala necesitas usar las funciones trigonométricas Math.cos y Math.sin, pero debes pasarles el valor en radianes y no en grados, ya que el atributo rotation almacena el valor en grados.

Otra cosa, también hay que verificar cuando la bala salga fuera de los límites del escenario para removerla, porque si no hacemos esto a la larga se va a saturar el juego con muchísimas instancias de bala y va a provocar que se ponga el juego más lento que una tortuga, hay que liberar esos recursos.

Código actionscript:
Ver original
  1. stage.addEventListener(MouseEvent.CLICK, disparar);
  2.  
  3. function disparar(evt:MouseEvent) {
  4.     var bala:Bala = new Bala();
  5.     bala.x = pj.x;
  6.     bala.y = pj.y;
  7.     bala.rotation = pj.rotation;
  8.     bala.addEventListener(Event.ENTER_FRAME, onEnterFrameListener);
  9.     addChild(bala);
  10. }
  11.  
  12. function onEnterFrameListener(evt:Event):void {
  13.     var target:MovieClip = evt.target as MovieClip;
  14.     // Grados a radianes
  15.     var radians:Number = target.rotation * Math.PI / 180;
  16.     target.x += Math.cos(radians) * 5;
  17.     target.y += Math.sin(radians) * 5;
  18.     // Calcular límites
  19.     if(
  20.        target.x <= 0 ||
  21.        target.x >= stage.stageWidth ||
  22.        target.y <= 0 ||
  23.        target.y >= stage.stageHeight
  24.     ) {
  25.         target.removeEventListener(Event.ENTER_FRAME, onEnterFrameListener);
  26.         target.parent.removeChild(target);
  27.     }
  28. }

Un saludo y suerte !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.

Etiquetas: clips
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:27.