1

我有一些动画剪辑在 Flash 时间轴上添加和动画。现在我需要附加一个脚本并在每一帧中对这些 MovieClip 执行一些任务。

问题在于,在时间线中出现 MovieClip 的第一帧中,我得到了一个空对象引用。

在这里,您有一个演示 de 问题的 fla 文件。在输出的跟踪上,您将看到在第 9 帧中 currentObject 为空。但是,它存在于时间线上。

我对 Flash 开发很陌生,因此我们将不胜感激。

这是演示脚本:

processFrame(null)
addEventListener(Event.ENTER_FRAME, processFrame);

function processFrame(e:Event){

trace("frame: ", this.currentFrame);

for (var i:uint = 0; i < this.numChildren; i++) {
    var currentObject = this.getChildAt(i);
    trace("currentObject: ", currentObject);
}

trace(" ");

if(this.currentFrame == totalFrames) {
removeEventListener(Event.ENTER_FRAME, processFrame);
this.stop();
}
}

提前致谢。

4

4 回答 4

2

尝试使用 Event.FRAME_CONSTRUCTED 而不是 ENTER_FRAME 或 EXIT_FRAME

因为它是在进入帧并加载所有阶段触发的,但您退出到下一帧之前。然后,您可以将所需的任何更改应用于当前帧。

此外,如果您使用此事件,我认为您不需要第一个 processFrame(null),因为您永远不会在第 1 帧上获得 ENTER_FRAME,但您应该获得 FRAME_CONSTRUCTED。

于 2012-07-09T10:46:29.990 回答
1

如果将其更改为 Event.EXIT_FRAME 它将正常工作,见下文:

addEventListener(Event.EXIT_FRAME, processFrame, false, 0, true);

function processFrame(e:Event){

    trace("frame: ", this.currentFrame);

    for (var i:uint = 0; i < this.numChildren; i++) {
        var currentObject = this.getChildAt(i);
        trace("currentObject: ", currentObject);
    }


    if(this.currentFrame == totalFrames) {
        removeEventListener(Event.EXIT_FRAME, processFrame);
        this.stop();
    }
}

记得在移除事件监听器中更改它;)

于 2012-07-09T10:30:57.710 回答
0

时间轴上的对象是否在每个关键帧都具有相同的实例名称?这是一个常见的错误。

始终在属性面板中为您的影片剪辑指定一个实例名称,然后再在时间轴上添加操纵该影片剪辑的关键帧。

于 2012-07-09T09:34:24.863 回答
0

尝试用以下代码替换上面的 fla 代码:

addEventListener(Event.ENTER_FRAME, processFrame);

function processFrame(e:Event){

  trace("frame: ", this.currentFrame);  
  var currentObject = this.getChildAt(0);
  trace("currentObject: " + currentObject + "\n");      

  if(this.currentFrame == totalFrames) {
    removeEventListener(Event.ENTER_FRAME, processFrame);
    this.stop();
  }

}

您将看到输出完全相同。

事实上,你不需要遍历舞台的孩子,实际上你的 fla 剪辑中总是只有一个孩子(在索引 0 处)。我认为的问题是,当您在第 9 帧中输入第二部分时,该对象尚未完全加载/实例化。我认为有一个事件要等待它,但我不记得确切。

于 2012-07-09T10:16:14.093 回答