嘿,大家现在都在研究这个问题,似乎无法弄明白。
基本上我尝试做的是当我的introScreen
用动画完成时我要删除introScreen
并添加startScreen
因为两个Movie Clip对象包含动画,我不希望一个人开始,而另一个仍在继续。所以我试图使用Frame属性来检查这个条件并执行它。
这是我到目前为止所做的,但除了播放introScreen
之外什么也没做,只是停留在那个屏幕上。
//Start Game Screen
introScreen = new mcIntroScreen();
stage.addChild(introScreen);
introScreen.x = (stage.stageWidth / 2);
introScreen.y = (stage.stageHeight / 2);
if (introScreen.currentFrame == introScreen.totalFrames)
{
stage.removeChild(introScreen);
//Start Game Screen
startScreen = new mcStartGameScreen();
stage.addChild(startScreen);
startScreen.x = (stage.stageWidth / 2);
startScreen.y = (stage.stageHeight / 2);
trace(startScreen + "startscreenADDED");
startScreen.addEventListener("PLAY_AGAIN", playGameAgain, false, 0, true);
startScreen.addEventListener("TIME_ATTACK", timeAttackMode, false, 0, true);
}
也许有人可以帮我解决这个问题我认为当前的代码意味着如果当前帧播放并达到动画中的总帧数,那么条件就会满足我尝试跟踪它但是什么都没有出现。任何帮助,将不胜感激。
答案 0 :(得分:2)
您需要将帧检查放在Event.ENTER_FRAME
处理程序中。就像现在一样,除非你遗漏了一些代码,否则它只会在创建introScreen
之后立即检查一次,这当然意味着它仍然在第1帧。尝试这样的事情:
// Start Game Screen
introScreen = new mcIntroScreen();
// etc
addEventListener(Event.ENTER_FRAME, introEnterFrameHandler);
function introEnterFrameHandler(e:Event):void {
if (introScreen.currentFrame == introScreen.totalFrames)
{
removeEventListener(Event.ENTER_FRAME, introEnterFrameHandler);
stage.removeChild(introScreen);
// etc
}
}
请注意,这意味着最后一帧不会被真正看到。在处理结尾之前,您可以使用Event.EXIT_FRAME
让最后一帧显示。
另外,我通常这样做的方式有点不同。我没有使用Event.ENTER_FRAME
跟踪回放,而是在时间轴的末尾发送一个事件。例如:
// on the last frame of the symbol timeline
dispatchEvent(new Event("introComplete", true));
然后我可以简单地将其作为自定义事件处理:
// Start Game Screen
introScreen = new mcIntroScreen();
// etc
addEventListener("introComplete", introCompleteHandler);
function introCompleteHandler(e:Event):void {
stage.removeChild(introScreen);
// etc
}