EventListener AS3问题重置问题

时间:2014-02-06 16:08:15

标签: actionscript-3 flash addeventlistener

嘿伙计们,我的AS3文件中的事件监听器有问题。每次父(83帧)影片剪辑重置时,我试图让这个持续83帧的对象出现在不同的位置。问题是我有一个函数将对象置于随机的y值,这个值很好。当它重置时,ojbect出现在同一个Y点上。这是因为我将removeEventListener删除了函数,否则对象在加载时会从屏幕上射出。如何再次调用该事件监听器而不会导致将对象从屏幕上拍摄的循环?

这是我的代码:

import flash.events.Event;
stop();
addEventListener(Event.ENTER_FRAME, SeaWeedPostion);
//stage.addEventListener(Event.ADDED_TO_STAGE, SeaWeedPostion);



function SeaWeedPostion(e:Event):void{
//  if(newSeaWeed == 1) {
var randUint:uint = uint(Math.random() *500  + 50);
this.seaweedSet.y += randUint;
trace(randUint);

stopPos();
//}else{
    //nothing
//  }
}

function stopPos():void{
removeEventListener(Event.ENTER_FRAME, SeaWeedPostion);
//var newSeaWeed = 0;
}

function resetSeaWeed():void{
addEventListener(Event.ENTER_FRAME, SeaWeedPostion);
}

我在尝试不同的东西时会有一些代码。 有人有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

每帧触发一次ENTER_FRAME事件,所以不是改变每一帧的位置,也许最好创建一个计数器,计算帧数,如果它达到82,则改变SeaWeed的位置。

var counter:uint = 0;

现在添加ENTER_FRAME侦听器

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function SeaWeedPostion(e:Event):void {
    counter++;

    //Are we there yet?
    if(counter < 83) {
        //Nope, carry on
    }
    else {
        //Yey!
        changePosition();
        counter = 0;
    }
}

//Reset SeaWeed position when called
function changePosition() {
    var randUint:uint = uint(Math.random() *500  + 50);
    this.seaweedSet.y += randUint;
    trace(randUint);
}