什么时候Flash帧脚本完全执行?

时间:2010-09-08 11:18:32

标签: flash actionscript-3 movieclip

我有一个动画片段,其中包含第1帧的动作

this["myCustomVar"] = "bla";

然后我这样做:

var mc:MovieClip = new MyMovieClip();
trace(mc.hasOwnProperty("myCustomVar")); // is false

为什么动画片段没有myCustomVar,或更普遍地说:

影片剪辑中的帧脚本何时完全执行?

2 个答案:

答案 0 :(得分:1)

如果你使用的是flash 10,那么每帧有7个事件:

  1. 发送事件类型Event.ENTER_FRAME的事件
  2. 执行子MovieClip的构造函数代码
  3. 事件类型Event.FRAME_CONSTRUCTED已调度的事件
  4. 执行MovieClip框架操作
  5. 执行儿童MovieClip的帧动作
  6. 调度事件类型Event.EXIT_FRAME的事件
  7. 活动类型Event.RENDER发送的事件
  8. 所以你可以听EXIT_FRAME事件,此时帧脚本应该运行并且应该设置var。

    Source

答案 1 :(得分:0)

我不认为帧脚本的时间安排是你问题的核心。对于上面的代码snippits,你会遇到类与实例的问题。我们来看看这一行:

this["myCustomVar"] = "bla";

在那里,您已在根时间轴实例中定义了一个名为myCustomVar的新变量。实例是单独存在的,可以自定义的。但是,自定义一个实例不会更改最初定义它的类。想想一个小部件工厂:如果你从装配线末端取出一个完成的小部件并将其涂成红色,这并不意味着工厂现在将生成红色小部件......你刚刚改变了一个小部件实例行的结尾。为了使您的工厂生产红色小部件,您需要更改工厂本身 - 或类定义。那么,我假设你有一个为MyMovieClip编写的自定义类?如果没有,您需要在MyMovieClip.as

中执行此操作
package
{
    import flash.display.MovieClip;

    public class MyMovieClip extends MovieClip
    {
        public var myCustomVar:String = "";

        public function MyMovieClip():void {
            super();
        }
    }
}

一旦修改了对象的类定义以包含自定义变量,那么该类的所有新实例都将使用该变量构造。希望有所帮助。