Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/06/2011, 17:51
Avatar de jahepi
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.