【发布时间】:2012-02-07 12:49:12
【问题描述】:
我正在考虑制作一个在某些点自行停止的影片剪辑(只需使用 stop();在影片剪辑时间线中的某些关键帧处),然后提示用户继续剪辑。
什么是最好的听电影剪辑停止的原因?我想我想要一个事件侦听器来检测电影剪辑何时停止,但我不知道是否有。
非常感谢
【问题讨论】:
标签: flash actionscript-3
我正在考虑制作一个在某些点自行停止的影片剪辑(只需使用 stop();在影片剪辑时间线中的某些关键帧处),然后提示用户继续剪辑。
什么是最好的听电影剪辑停止的原因?我想我想要一个事件侦听器来检测电影剪辑何时停止,但我不知道是否有。
非常感谢
【问题讨论】:
标签: flash actionscript-3
因为您必须通过 stop() 手动停止 MovieClip,您可以使用 dispatchEvent() 在同一帧上轻松手动调度您自己的事件
例如,在一个框架上,您可以:
stop();
dispatchEvent(
new Event("movieclip_stopped");
);
那个 MovieClip 的监听器是:
myMovie.addEventListener("movieclip_stopped", _stopHandler);
function _stopHandler(e:Event):void
{
trace('mc was stopped');
}
【讨论】:
isPlaying 属性。
您可以使用一个未记录的功能; addFrameScript(MovieClip 的一个函数);顾名思义,它将代码添加到某个框架。这样您就不需要 framelistener,并且可以动态地将代码添加到关键帧。因此,知道影片剪辑何时结束;
mc.addFrameScript(mc.totalFrames - 1, onMcEnded);
function onMcEnded():void {
trace("last frame of movieclip");
}
如果您想制作具有特定标签的影片剪辑,然后对这些标签进行操作,一种方法是这样做。(我想对于不想添加代码的任何人来说,这都是很常见的代码直接在时间轴上)
假设您在时间线上添加了两个标签:askUser1 和 askUser2
在这些标签上添加交互的方式如下:
for each(var frameLabel:FrameLabel in mc.currentLabels) {
configureLabel(frameLabel.name,frameLabel.frame-1)
}
protected function configureLabel(labelName:String,labelFrame:int):void
{
switch(labelName) {
case "askUser1" :
mc.addFrameScript(labelFrame, onAskUser1);
break;
case "askUser2" :
mc.addFrameScript(labelFrame, onAskUser2);
break;
}
}
private function onAskUser1():void{
//do stuff for askUser1 Label
}
private function onAskUser2():void{
//do stuff for askUser2 Label
}
【讨论】:
可怕的 hacky 解决方案是不断收听onEnterFrame:
var isPlaying:Boolean = false;
var lastFrame:int = 0;
addEventListener(Event.ENTER_FRAME, function(event:Event):void
{
isPlaying = (lastFrame != currentFrame);
lastFrame = currentFrame;
});
更好的解决方案是根据您的 stop() 代码实际跟踪状态。
【讨论】:
嘿user1010076我不知道你是如何从 Marty 那里得到代码来工作的..
stop();
dispatchEvent(
new Event("movieclip_stopped");
);
我试了又试,然后从Introduction to event handling in ActionScript 3.0找到了这个班轮
target.dispatchEvent(new Event("type"));
因此,要让 Marty 的整个代码正常工作,您需要 ..
myMovie.dispatchEvent(new Event("movieclip_stopped"));
我有一个与你类似的用例,现在代码可以与添加的“目标”一起使用,而我没有它。
【讨论】: