嘿伙计们,我的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);
}
我在尝试不同的东西时会有一些代码。 有人有什么建议吗?
谢谢!
答案 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);
}