Duvida em Actionscript 3.0

DaWrath

Power Member
Boas. Estou com um problema ao codificar um MovieClip. o problema é nesta função:

Código:
package{

import naoprecisodepor-éimplicito

public class AvoiderGame extends MovieClip
    {

        public var army:Array;
        public var avatar:Avatar;
        public var gameTimer:Timer;
        public var appearTimer:Timer;

        public function AvoiderGame()
        {
            army = new Array();
            var newEnemy = new Enemy(100,-15);
            army.push( newEnemy );
            addChild( newEnemy );

            avatar = new Avatar();
            addChild( avatar );
            avatar.x = mouseX;
            avatar.y = mouseY;

            gameTimer = new Timer(1);
            appearTimer = new Timer(250);
            appearTimer.addEventListener( TimerEvent.TIMER, onTick );
            gameTimer.addEventListener( TimerEvent.TIMER, runGame );
            appearTimer.start();
            gameTimer.start();
        }
        public function onTick( timerEvent:TimerEvent ):void
        {
            if (Math.random() < 0.5)
            {
                var randomX:Number = Math.random() * 550;
                var randomY:Number = Math.random() * 100;
                var newEnemy:Enemy = new Enemy(randomX,randomY);
                army.push( newEnemy );
                addChild( newEnemy );
            }
        }

        public function runGame( timerEvent:TimerEvent ):void
        {
            avatar.x = mouseX;
            avatar.y = mouseY;

            for each (var enemy:Enemy in army)
            {
                enemy.moveToTarget();
                
                /*var len:int = army.length;
                if (len == 10)
                {
                    appearTimer.stop();
                }*/
                if (avatar.hitTestObject(enemy))
                    {
                        //gameTimer.stop();
                        removeChild( enemy );
                    }
            }

        }
}
Isto é maior parte do codigo. Isto faz parte de codigo básico para um avoider game mas estou a altera-lo para fazer de forma a que o que eu tenho de evitar venha atras do jogador. So que para eu fazer isso o spawn dos enemies não pode ser infinito, por isso fiz aquele if que está entre " /* ... */ ". Tenho removeChild( enemy ); no if (avatar.hitTestObject(enemy)) em vez de gameTimer.stop(); por motivos de teste. Por agora eles apenas estao codificados para percorrer o ecra de cima a baixo de forma y=y+3, não é que seja relevante. Antes de chegar à parte do "if" queria dizer que correndo o codigo com esta função como ela está agora, faz com que ao "matar" um enemy que apareceu depois de outro o jogo encrave por 1 segundo e dá uma mensagem de erro no output, não consigo perceber porquê:

ArgumentError: Error #2025: O DisplayObject fornecido deve ser filho do responsável pela chamada.
at flash.display::DisplayObjectContainer/removeChild()
at AvoiderGame/runGame()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()

isto aparece na caixa do output sempre que mato 1 enemy que apareceu depois de outro que ficou vivo.

O outro problema é ao usar aquele if comentado, que faz com que este erro de em qualquer 1 enemy que mate.

Estando isto resolvido queria uma pequena ajuda numa função que faça com que um enemy (imaginando aparecido em qualquer um dos cantos da janela) vá atras do player, não a percorrer o mesmo percurso que o player mas sim fazer o trajecto mais rapido para ir ter com o player (imaginando que não ha obstáculos), actualizando a sua linha de trajectoria de acordo com a posição do player, isto a cada fps.

Já tentei procurar no google mas não encontrei grande coisa ou o que encontrava não se aplicava bem ao que eu estou a fazer.

sei que andar a pedir algoritmos é chato mas acredito que alguem aqui tenha algum ficheiro com algo semelhante e que me possa ajudar, tanto no algoritmo como nos problemas que estou a ter

Agradeço desde já
 
Última edição:
Back
Topo