我正在考虑制作一个在某些点停止的电影剪辑(只需使用stop();在影片剪辑时间轴上的某些关键帧,然后提示用户继续剪辑。
听电影片段停止的最好理由是什么?我想我想要一个事件监听器来检测电影剪辑何时停止,但我不知道是否有。
多谢
因为你必须通过stop()
手动停止MovieClip,所以你可以使用dispatchEvent()
轻松地在同一帧上手动调度自己的事件
例如,在一个框架中,你可以这样写:
stop();
dispatchEvent(
new Event("movieclip_stopped");
);
这个MovieClip的监听器是:
myMovie.addEventListener("movieclip_stopped", _stopHandler);
function _stopHandler(e:Event):void
{
trace('mc was stopped');
}
有一个未公开的特性你可以使用;addFrameScript(一个MovieClip的函数);顾名思义,它将代码添加到某个框架中。这样就不需要帧监听器,而且可以动态地向关键帧添加代码。因此,知道影片剪辑何时结束将是;
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
}
骇人的破解方法是不断监听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");
);
我试了又试,然后发现这一行从介绍到事件处理在ActionScript 3.0
target.dispatchEvent(new Event("type"));
所以要让Marty的整个代码正常工作,你需要…
myMovie.dispatchEvent(new Event("movieclip_stopped"));
我有一个类似的用例,你的代码现在工作与"目标"添加,而我没有它。