如何在MovieClip结束时启动eventListeners?

时间:2015-02-08 00:35:43

标签: actionscript-3

我有我的比赛。第一帧是放置开始游戏按钮的地方 - 它带我到第2帧,我有我的游戏关卡。在第二帧中输入时,播放淡入淡出的MovieClip,并在其末尾我MovieClip(root).addChild(character);输入可播放的角色。

我的问题是键盘事件的eventListeners是在主时间轴代码中,如果我按任何移动角色的键,它将开始移动,即使它还没有出现,因为淡入淡出没有'完了。

有没有办法解决这个问题,或者我在哪里做错了?

如果需要,我会发布我的代码。谢谢!

2 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题,但这就是我的建议:

1)在主时间轴上,创建一个函数来添加角色和键盘监听器:

function beginPlaying():void {
    addChild(character);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
    // etc
}

2)在淡入淡出的MovieClip中,最后只需要调用此函数:

MovieClip(root).beginPlaying();

这应解决您当前的问题,并希望更容易处理任何类似的未来问题。

答案 1 :(得分:0)

此解决方案有效,但它存在潜在问题,因为控制游戏的代码现在部分隐藏在某些MovieClip中。我自己做了很多次,经常在需要改变,找到或记住某些东西时遇到麻烦。

稍微好一点的解决方案是不直接调用某个根函数,而只是调度一个事件:

dispatchEvent(Event.COMPLETE); // or any custom event

所以现在你的movieclip不必调用root中的特定函数,只是抛出一个Event,你的时间线可以有一个监听器。

此外,建议摆脱推子动画片段中的所有代码。同样,您可以在根目录中为Event.ENTER_FRAME添加侦听器,并检查推子是否已完成(fader.currentFrame == fader.totalFrames)