如何正确使用currentFrame / totalFrames AS3

时间:2015-02-03 01:31:57

标签: actionscript-3 flash-cs6

嘿,大家现在都在研究这个问题,似乎无法弄明白。

基本上我尝试做的是当我的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);
        }

也许有人可以帮我解决这个问题我认为当前的代码意味着如果当前帧播放并达到动画中的总帧数,那么条件就会满足我尝试跟踪它但是什么都没有出现。任何帮助,将不胜感激。

1 个答案:

答案 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
}