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

How to make a nested mc play without stopping or looping AS3 CS5

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

在主舞台上我有一个实例名称为 smash1_mcmc

在该 mc 中,我有另一个实例名称为 box1_mc 的 mc。它有一个简单的补间动画,在第 1 帧上有一个停止动作。我将标签 implode 放在 box1_mc.

的第 2 帧上

我想要的是 implodesmash1_mc 播放头到达第 30 帧时播放;所以我在 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 来演示我在父时间轴控制子时间轴时遇到的问题。

这真是一个简单的逻辑。无论你在 enterframe 中输入什么代码,都会在每一帧不断 运行,所以如果你要求 mc 转到第 2 帧,那么这就是 mc 将不断做的事情:转到第 2 帧。那个 mc 是否无关紧要有 1000 帧要播放,您告诉它转到第 2 帧,它就是这样做的。得到它?

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

正确地在每一帧你的 mc gotoandplay 标签 "implode"。这可能不是您想要的,但这就是您要求代码执行的操作。

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

正确地,mc 会按照您的要求进行操作:无论怎样,只要输入帧 运行s,您就可以继续播放。这就是 mc 所做的。

在这两种情况下,MC 都能按照您的要求正确播放。既然您知道只要进入 运行s 代码就会重复并且 mc 会执行代码所说的操作,您应该能够想出一种方法来阻止它?

编辑:回答您的评论。这取决于你是否真的需要一个enterframe。在你展示的例子中你没有,但这可能只是一个例子。如果您不需要 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;
    }
}

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