0

自从我不得不编写真正需要与时间线集成的 Actionscript(在这种情况下,控制必须以特定顺序发生的一系列帧)以来已经有一段时间了,我正试图弄清楚该怎么做。

在前几帧中,我有一个按钮“next_1”。

在第 10 帧,我需要另一个按钮“next_2”。我真的真的需要这个按钮不在第一帧上(我可能只是让它不可见,但这会创建一个我不想要的可点击区域)。

问题是,我没有放在“frame_1”上的任何东西都会在我的 Document 类中呈现为 null。

有什么解决办法吗?如果可能的话,我宁愿不必在时间轴上编写我的脚本(从长远来看,将它保存在文档类中似乎更容易)......

4

2 回答 2

1

时间轴上的项目是动态创建的,因此如果播放头尚未到达第 10 帧,则不会创建 next_2。

最简单的文档级解决方案:

  1. 创建一个框架标签数组,如 ["label1", "label2"]
  2. 创建 sectionIndex 变量并将其设置为 0
  3. 在自己的图层上创建一个下一个按钮,以便它始终显示。
  4. 单击下一个按钮时,增加 sectionIndex,然后 gotoAndPlay(myLabels[sectionIndex])
于 2012-04-26T18:30:19.523 回答
0

好吧,直接摘自《Real World Flash Game Development》:

/**************************************************
* FRAME LABELS *
**************************************************/
private function enumerateFrameLabels():void {
   for each (var label:FrameLabel in currentLabels) {
       addFrameScript(label.frame-1, dispatchFrameEvent);
   }
}

private function dispatchFrameEvent():void {
   dispatchEvent(new Event(currentLabel, true));
}

这会在时间轴上的每个帧标签处调度一个事件。

然后你可以为每一帧添加事件监听器:

addEventListener("name_of_my_framelabel", frameHandler);
addEventListener("another_framelabel", frameHandler);

并编写一个 switch 语句,以便在按钮实际出现在时间轴上时为其添加事件侦听器。

private function frameHandler(e:Event):void {
            switch(e.type) {
                case 'screen_2':
                    stop();
                    next_2.addEventListener(MouseEvent.CLICK, click2, false, 0, true)
                break;
            }
        }
于 2012-04-26T18:42:49.903 回答