Actionscript 3 addFrameScript在Document类中工作,在时间轴上完全崩溃?

Actionscript 3 addFrameScript在Document类中工作,在时间轴上完全崩溃?,actionscript-3,Actionscript 3,我有一个问题,我作为一个班写了以下测试: package { import flash.display.MovieClip; import flash.display.FrameLabel; public class FrameLabels extends MovieClip { public function FrameLabels () { var labelsList:Array = current

我有一个问题,我作为一个班写了以下测试:

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);
        }




    }
}
包
{
导入flash.display.MovieClip;
导入flash.display.FrameLabel;
公共类FrameLabels扩展了MovieClip
{
公共函数框架标签()
{
变量标签列表:数组=当前标签;
对于(变量i:int=0;i
我有框架标签: 星期一 星期二 星期三

这在文档类中非常有效,但是,当我将其放在时间轴的第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);
}
var标签列表:数组=当前标签;
对于(变量i:int=0;i
我接受了你的as并试图模仿你的问题(仅使用时间线代码)

我发现:

  • 第1层第1帧上的代码
  • 星期一在第2层第1帧,星期二在第2层第11帧,星期三在第2层第21帧
  • 第1层第21帧上的停止()

对我来说没有错误,但我确实发现星期三的处理程序在触发stop()之前运行。我建议在处理程序之后放置一个stop(),这样timline就不会在第一个位置播放。如果还有什么我可以帮忙的,请告诉我。

因为SWF电影是为流媒体设计的,所以第1帧上的代码将在第1帧加载后立即执行。如果电影的其余部分尚未完成加载,则currentLabels属性或要为其分配处理程序脚本的帧尚未设置(空),这将导致播放机崩溃

您必须确保脚本仅在SWF完全加载时执行。可以通过“属性”面板将电影中的所有内容导出到第1帧(以便在加载第1帧后加载所有内容),或者(更好)创建预加载循环以检查bytesLoaded/ByTestTotal

这在文档类中起作用,因为构造函数是在文档SWF完成加载后调用的