我有一个问题,我将以下测试编写为一个类:
package
{
import flash.display.MovieClip;
import flash.display.FrameLabel;
public class FrameLabels extends MovieClip
{
public function FrameLabels ()
{
var labelsList:Array = currentLabels;
for (var i:int = 0; i < currentLabels.length; i++)
{
if (currentLabels[i].name == "monday")
{
addFrameScript (currentLabels[i].frame-1, mondayHandler);
}
if (currentLabels[i].name == "tuesday")
{
addFrameScript (currentLabels[i].frame-1, tuesdayHandler);
}
if (currentLabels[i].name == "wednesday")
{
addFrameScript (currentLabels[i].frame-1, wednesdayHandler);
}
}
}
private function mondayHandler():void
{
trace("at monday at frame " + currentFrame);
}
private function tuesdayHandler():void
{
trace("at tuesday! at frame " + currentFrame);
}
private function wednesdayHandler():void
{
trace("at wednesday! at frame " + currentFrame);
}
}
}
我有框架标签: 星期一 星期二 星期三
这在文档类中很有用,但是,当我把它放在我的时间轴的第1帧时,它会崩溃Flash。
我在最后一帧上有停止操作,因此播放头不应该一遍又一遍地运行脚本,是否有任何原因导致崩溃?
时间轴代码:
var labelsList:Array = currentLabels;
for (var i:int = 0; i < currentLabels.length; i++)
{
if (currentLabels[i].name == "monday")
{
addFrameScript (currentLabels[i].frame-1, mondayHandler);
}
if (currentLabels[i].name == "tuesday")
{
addFrameScript (currentLabels[i].frame-1, tuesdayHandler);
}
if (currentLabels[i].name == "wednesday")
{
addFrameScript (currentLabels[i].frame-1, wednesdayHandler);
}
}
function mondayHandler ():void
{
trace ("at monday at frame " + currentFrame);
}
function tuesdayHandler ():void
{
trace ("at tuesday! at frame " + currentFrame);
}
function wednesdayHandler ():void
{
trace ("at wednesday! at frame " + currentFrame);
}
答案 0 :(得分:1)
由于SWF电影是专为流媒体设计的,因此第1帧的代码将在第1帧加载后立即执行。如果影片的其余部分尚未完成加载,则会有一个很好的更改:currentLabels属性或您要分配处理程序脚本的帧尚未设置(null),这将导致播放器崩溃。 / p>
您必须确保仅在SWF完全加载时才执行脚本。通过属性面板将影片中的所有内容导出到第1帧(因此在加载第1帧后加载所有内容),或者(更好)创建预加载器循环以检查bytesLoaded / bytesTotal。
这适用于文档类,因为在文档SWF完成加载后调用构造函数。
答案 1 :(得分:0)
我接受了你并试图模仿你的问题(仅使用时间轴代码)
我找到了什么:
对我来说没有错误,但我确实发现星期三的处理程序在触发stop()之前运行。我建议你在处理程序之后加一个stop(),这样timline就不会在第一时间出现了。让我知道我还能做些什么来帮助你。