1

实际上我可以完成这段代码,但我对参数和removeEventListener有误解。我有两个具有相同目标的代码,这是我的第一个代码:

第一个代码:


    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);
        }
    }
    

第二个代码:


    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); 删除侦听器,这可以正常工作,但是在第一个代码中我不能使用第二个代码bobRun(startX:Number, startY:Number, endX:Number, endY:Number) 之类的参数。

在第二个代码中,我无法像第一个代码那样删除监听器 bob.removeEventListener(Event.ENTER_FRAME, animateBob); ,所以trace("bob.stop"); 不能在输出面板中停止,但我可以使用参数。

我需要参数和 removeEventListener 来构建我的项目,所以请帮助我。:'(

4

1 回答 1

0

对于第一段代码,如果你想传递参数,你可以只使用一个中间函数。

例如

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);

...在您想要删除侦听器的逻辑的任何部分。

于 2013-06-23T15:08:18.247 回答