анимировать MovieClip с помощью addEventListener — actionscript 3

на самом деле я могу закончить этот код, но я неправильно понимаю аргументы и removeEventListener. У меня есть два кода, которые имеют одну и ту же цель, это мой первый код:

First Code :


    public function walk(){
        var bob:bob= new bob();
        bob.x = 0;
        bob.y = 300;
        addChild(bob);
        bobRun();
    }
    private function bobRun(){
        bob.addEventListener(Event.ENTER_FRAME, animateBob);
    }
    private function animateBob(event:Event) {
        if (bob.x <= 200){
            bob.x += 2;
            bob.gotoAndPlay(bob.currentFrame);
        } else { 
            bob.gotoAndStop(1);
            trace("bob.stop");
            bob.removeEventListener(Event.ENTER_FRAME, animateBob);
        }
    }
    

Second code :


    public function walk(){
        var choose:boolean = false;
        bobRun(0, 300, 200, 300);
    } 
    private function bobRun(startX:Number, startY:Number, endX:Number, endY:Number){
        bob.addEventListener(Event.ENTER_FRAME, function(e:Event):void{
        startX = bob.x; startY = bob.y; 
        if (startX != endX || startY != endY){
            choose = true;
            if (startX < endX && startY > endY){
                bob.x += 1;
                bob.y -= 1;
            } if (startX > endX && startY < endY){
                bob.x -= 1;
                bob.y += 1;
            } if (startX == endX && startY > endY){
                bob.y -= 1;
            } if (startX == endX && startY < endY){
                bob.y += 1;
            } if (startX < endX && startY == endY){
                bob.x += 1;
            } if (startX > endX && startY == endY){
                bob.x -= 1;
            }
            bob.gotoAndPlay(bob.currentFrame);
        } else {
            bob.gotoAndStop(1);
            trace("bob.stop");
        }
        })
    }
    

в первом коде я использую bob.removeEventListener(Event.ENTER_FRAME, animateBob); для удаления прослушивателя, и это работает нормально, но в первом коде я не могу использовать аргументы, такие как второй код < b>bobRun(startX:Число, startY:Число, endX:Число, endY:Число).

во втором коде я не могу удалить прослушиватель, как в первом коде bob.removeEventListener(Event.ENTER_FRAME, animateBob);, поэтому trace("bob.stop"); не могу остановиться на панели вывода, но я могу использовать аргументы.

Мне нужны аргументы и removeEventListener для создания моего проекта, поэтому, пожалуйста, помогите мне, ребята. :'(


person D2N    schedule 21.06.2013    source источник
comment
эта проблема закрыта, я нашел решение. ^_^   -  person D2N    schedule 22.06.2013


Ответы (1)


Для первого фрагмента кода вы можете просто использовать промежуточную функцию, если хотите передать аргументы.

e.g.

private function bobRun(){
    bob.addEventListener(Event.ENTER_FRAME, enterFrameEventHandler);
}

public function enterFrameEventHandler(e:Event):void{
    animateBob(arg1,arg2,arg3); //this is where you would pass your arguments
}

Для второго фрагмента кода вы используете анонимную функцию; таким образом, вы можете просто добавить...

e.target.removeEventListener(e.type, arguments.callee);

... в любой части логики, которую вы хотите удалить слушателя.

person Anthony Pace    schedule 23.06.2013