Action Script 3 根本问题。尝试从 MoiveClip 中的侦听器调用函数

Action Script 3 root issue. Trying to call function from a listener inside a MoiveClip

见附图:我在影片剪辑 (bannerContent) 中有一个按钮 (expnd_btn),并尝试向它添加一个侦听器,以便它可以调用主时间轴框架 2 上的代码。 frame1 没有剪辑。

bannerContent.expnd_btn.addEventListener(MouseEvent.CLICK,ShowPanel);

它在 MC 中不起作用...但是如果我删除按钮并将其放在主舞台上并像下面那样引用,代码就可以工作。

expnd_btn.addEventListener(MouseEvent.CLICK,ShowPanel);

完全编码(主要阶段):

bannerContent.expnd_btn.addEventListener(MouseEvent.CLICK,ShowPanel);
function ShowPanel(event:MouseEvent){
//do something
}

我没有收到错误消息,指示侦听器无法连接到 MC 内部的 btn...但是 btn 未在外部找到该功能。

所以问题: 1. 你如何以不同的方式写这个,所以它有点被迫工作。我在下面尝试过,但它给出了错误

function get Expndbtn():MovieClip{return this.getChildByName("expnd_btn") as MovieClip;}
bannerContent.Expndbtn.addEventListener(MouseEvent.CLICK,ClosePanel);

3。还有你怎么写 _root.callFuction() 或者说 _global.callFunction() in as3.

首先,我建议您阅读更多有关 Action Script 及其工作原理的内容。

在每一帧上,您附加特定于 特定帧 可能 之后的帧的代码。在谈论嵌套的 MovieClips 时 - 它们具有树结构。因此,如果您在某个帧中编写代码,您的代码将在该特定 MovieClip 中运行。 this 是当前剪辑。所以 this.parent 是父级,this.expnd_btn 将从当前剪辑中获取 expnd_btn..

我的观点是——在你想要的地方写代码,但要记住所谓的scope——你现在在哪里。如果您在根目录下编写代码 - 将整个路径插入按钮:bannerContent.expnd_btn.addEventListener..;如果你在横幅里面写代码,那么你只需要expnd_btn.add..但是点击时调用的函数是NOT这里,所以你需要写它的路径:expnd_btn.addEventListener(MouseEvent.CLICK, this.parent.ShowPanel);

注意:this 不是必需的,但有时有助于了解正在发生的事情。 btn 就是 this.btn。祝你好运!

哦,还有一件事——当你想调用下一帧的函数时,想想这个真实世界的例子:你生活在现在(当前帧)。您知道如何骑自行车并且可以骑自行车(调用方法)。明天(下一帧)你将学习如何游泳(方法在第二帧定义,但你仍在第一帧)。所以你今天想游泳吗? :)

它被称为 timeline 是有原因的 - 因为它随着时间的推移而发生。如果你想调用一些东西——你只能调用过去的方法(以前的帧)。要么在第一帧定义所有内容,要么学习如何管理这些需求(或者最好 - 开始使用 类)。