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 originalstage.addEventListener(MouseEvent.CLICK, disparar);
function disparar(evt:MouseEvent) {
var bala:Bala = new Bala();
bala.x = pj.x;
bala.y = pj.y;
bala.rotation = pj.rotation;
bala.addEventListener(Event.ENTER_FRAME, onEnterFrameListener);
addChild(bala);
}
function onEnterFrameListener(evt:Event):void {
var target:MovieClip = evt.target as MovieClip;
// Grados a radianes
var radians:Number = target.rotation * Math.PI / 180;
target.x += Math.cos(radians) * 5;
target.y += Math.sin(radians) * 5;
// Calcular límites
if(
target.x <= 0 ||
target.x >= stage.stageWidth ||
target.y <= 0 ||
target.y >= stage.stageHeight
) {
target.removeEventListener(Event.ENTER_FRAME, onEnterFrameListener);
target.parent.removeChild(target);
}
}
Un saludo y suerte !