如何在不停止或循环的情况下制作嵌套的 mc 播放 AS3 CS5
How to make a nested mc play without stopping or looping AS3 CS5
我在不循环播放嵌套 mc
时遇到问题。
在主舞台上我有一个实例名称为 smash1_mc
的 mc
。
在该 mc 中,我有另一个实例名称为 box1_mc
的 mc。它有一个简单的补间动画,在第 1 帧上有一个停止动作。我将标签 implode
放在 box1_mc
.
的第 2 帧上
我想要的是 implode
在 smash1_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;
}
}
甚至有数百种不同的方法可以做到这一点,所以这里只是其中的几种。
我在不循环播放嵌套 mc
时遇到问题。
在主舞台上我有一个实例名称为 smash1_mc
的 mc
。
在该 mc 中,我有另一个实例名称为 box1_mc
的 mc。它有一个简单的补间动画,在第 1 帧上有一个停止动作。我将标签 implode
放在 box1_mc
.
我想要的是 implode
在 smash1_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;
}
}
甚至有数百种不同的方法可以做到这一点,所以这里只是其中的几种。