0

我有一堆菜单窗口放在单独的框架上(例如,主菜单在第 1 帧,选项菜单在第 2 帧,章节菜单在第 3 帧,字符菜单在第 4 帧等)。在每个菜单上都有一堆文本链接(电影剪辑实例),单击时会转到另一个菜单页面。其中一些相同的链接(相同的实例)在多个页面上重复,因为它们执行相同的功能。例如,单击“backToMain”实例将返回到第 1 帧,即主菜单,无论单击哪个页面。

有谁知道我如何构建这个?到目前为止,我已经尝试为每个链接添加侦听器,但是由于许多链接位于除第 1 帧之外的不同帧上,因此我无法向它们添加侦听器,直到我告诉 actionscript 翻转到该帧,我没有不想做。我想在开始时一次性向所有链接全局添加侦听器:

var linksArray:Array = [newStory, continueStory, options, characters, backToMain, backToOptions, ... etc];

for each (var link:MovieClip in linksArray) {
link.addEventListener(MouseEvent.CLICK, onClick);
}

function onClick(e:MouseEvent):void
            {
                if (e.target.name == "newStoryLink") {

                    delegate.beginStory();

                } else if (e.target.name == "continueStory") {

                    // do something else
                } else if (e.target.name == "chapters") {

                    // do something else
                } else if (e.target.name == "options") {

                    // do something else
                }

上面的代码不起作用,因为如前所述,我无法将侦听器添加到其他帧上存在的实例。该代码基本上告诉 AS 在单击任何链接时要做什么,无论我在哪个框架上或单击该链接的哪个实例。谢谢。

4

1 回答 1

0

这就是我对上述评论的意思。我刚刚在一个空的 Flash 文件中尝试了以下内容:

  • 第一帧:空关键帧/一些内容
  • 第 10 帧:带有名为“someButton”的按钮的关键帧

  • 框架1:以下代码:

            import flash.events.MouseEvent;
    
            stage.addEventListener(MouseEvent.CLICK, onClick);
    
            function onClick(e:MouseEvent):void {
    
                if (e.target.name == "someButton")
                    trace("Button clicked");
    
            }
    

而已。如果我单击第 10 帧上的按钮,则会出现该消息。

这是可行的,因为 Flash 使用冒泡事件模型,这意味着显示对象(例如按钮)上的大多数(任何?)事件也会传递给它们的父级,以及它们的父级等。所以最终,CLICK来自按钮的事件到达阶段,并由onClick事件处理程序处理。在那里,我们检查事件源自( Event.target) 的对象是否name等于someButton

在我放置 的地方trace,您只需放置单击菜单项时的逻辑。这是您正在寻找的功能吗?

请注意,您不需要摆弄,等stage属性。只需使用上面的代码作为起点。buttonModemouseChildren

于 2012-04-15T19:22:32.980 回答