我有一堆菜单窗口,我放在不同的框架上(例如主菜单在第1帧,第2帧的选项菜单,第3帧的章节菜单,第4帧的字符菜单等)。在每个菜单上有一堆文本链接(movieclip实例),当点击进入另一个菜单页面时。这些相同链接中的一些(相同实例)在多个页面上重复,因为它们执行相同的功能。例如,单击“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在单击任何链接时要执行的操作,无论我在哪个框架上或单击该链接的哪个实例。 感谢。
答案 0 :(得分: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使用冒泡事件模型,这意味着显示对象(例如按钮)上的大多数(任何?)事件也会传递给父母,父母等等。所以最终,{来自按钮的{1}}事件到达阶段,由CLICK
事件处理程序处理。在那里,我们检查来自(onClick
)的事件来自的对象是否Event.target
等于name
。
在我放置someButton
的地方,您只需在单击菜单项时输入逻辑。
这是您正在寻找的功能吗?
请注意,您无需摆弄trace
属性,例如stage
,buttonMode
等。只需使用上面的代码作为起点。