如何在不停止或循环AS3 CS5的情况下进行嵌套的mc播放

时间:2015-11-11 14:24:29

标签: actionscript-3 flash-cs5.5

我在使用嵌套mc而不循环播放时遇到问题。

在主舞台上,我有mc,实例名称为smash1_mc

在那个mc中,我有另一个实例名为box1_mc的mc。它有一个简单的补间,在第1帧上有停止操作。我已将标签implode放在box1_mc的第2帧上。

implode播放头到达第30帧时,我想要发生的是smash1_mc;所以我在smash1_mc的动作层中的第30帧上放置了一个关键帧。在该关键帧的actions面板中,我尝试了一些不同的东西。

//When I use the code below, the it only plays the first frame of the "implode" //label instead of the full timeline of box1_mc

addEventListener(Event.ENTER_FRAME, boxSmash);

function boxSmash(event:Event):void
{   
    box1_mc.gotoAndPlay("implode");
}

//When I use 'play();' instead of gotoAndPlay("implode"); like this…

addEventListener(Event.ENTER_FRAME, boxSmash);

function boxSmash(event:Event):void
{
    box1_mc.play();
}
尽管在最后一帧上执行了box1_mc操作,但

stop();完全播放,但它会循环播放。我真的不关心我使用哪种机制,我只是希望帧事件触发box1_mc完整播放而不用box1_mc之后独立循环。这似乎很简单。但我不知道出了什么问题。

如果这令人困惑,我可以发送整个.fla文件。我实际上正在为一个培训项目做一个更大的事情,但我做了这个简单的.fla来证明我在控制子时间轴的父时间轴上遇到的问题。

1 个答案:

答案 0 :(得分:1)

这实际上是一个简单的逻辑。无论你在一个输入框架中输入的代码是什么,都会在每一帧上不断运行,所以如果你要求mc进入第2帧那么那个mc会不断地做什么:转到第2帧。如果不重要的话那个mc有1000帧可以播放,你告诉它去第2帧,那就是它的作用。得到它?

所以第一种情况:box1_mc.gotoAndPlay(" implode");

正确地在每一帧你的mc gotoandplay标签" implode"。这可能不是你想要的,但这就是你要求代码做的事情。

第二种情况:box1_mc.play();

正确的mc做你所问的是:无论如何,只要enterframe运行,你就继续玩。这就是mc的作用。

在这两种情况下,mc都能按照您要求的方式正确播放。既然你知道只要enterframe运行代码就会重复,而mc会执行代码所说的,你应该能找到一种方法来阻止它吗?

编辑:回答你的评论。这取决于你是否真的需要一个enterframe。在示例中,您显示的不是,但这可能仅仅是一个示例。如果您不需要输入框,则不要使用它,只需直接调用您的mc并使其播放即可。如果你确实需要一个enterframe,那么你可以阻止它:

addEventListener(Event.ENTER_FRAME, boxSmash);

function boxSmash(event:Event):void
{   
    box1_mc.gotoAndPlay("implode");
    removeEventListener(Event.ENTER_FRAME, boxSmash);
}

或者你可以检查mc是否已经在播放

function boxSmash(event:Event):void
{   
    if(!box1_mc.isPlaying)
    {
        box1_mc.gotoAndPlay("implode");
    }
}

或者您可以创建自己的支票:

var mymcisplaying:Boolean;
function boxSmash(event:Event):void
{   
    if(!mymcisplaying)
    {
        box1_mc.gotoAndPlay("implode");
        mymcisplaying = true;
    }
}

甚至有数百种不同的方法可以做到这一点,所以这里只有几个。