请参阅附带的图片:我在movieClip(bannerContent)中有一个按钮(expnd_btn),并尝试添加一个监听器,以便它可以调用主时间轴frame2上的代码。 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。另外你如何在as3中编写_root.callFuction()或者说_global.callFunction()。
答案 0 :(得分:1)
首先,我建议您阅读更多有关Action Script以及它如何工作的内容。
在每个框架上,您附加特定于特定框架的代码,然后可能框架。在谈论嵌套的MovieClip时 - 它们具有树结构。因此,如果您在某个框架中编写代码,您的代码将在该特定的MovieClip中运行。 this
是当前剪辑。因此this.parent
是父级,this.expnd_btn
将从当前剪辑获得expnd_btn
。
我的观点是 - 将代码写在您想要的位置,但请记住所谓的scope
- 您现在在哪里。如果您在root中编写代码 - 将整个路径插入按钮:bannerContent.expnd_btn.addEventListener..
;如果您在横幅中编写代码 ,那么您只需要expnd_btn.add..
,但点击时调用的功能不此处,所以你需要写出它的路径:expnd_btn.addEventListener(MouseEvent.CLICK, this.parent.ShowPanel);
注意:不需要this
,但有时有助于了解正在发生的事情。简单btn
表示this.btn
。祝你好运!
哦,还有一件事 - 当你想要调用下一帧的函数时,想想这个真实世界的例子:你生活在现在(当前帧)。你知道如何骑自行车并且可以做到(称之为方法)。明天(下一帧)您将学习如何游泳(方法在第二帧定义,但您仍然在第1帧)。你想今天游泳吗? :)
有一个原因,它被称为timeline
- 因为它随着时间的推移而发生。如果你想调用某些东西 - 你只能从过去(前一帧)调用方法。要么在第一帧上定义所有内容,要么学习如何管理这些需求(或者最好 - 开始使用类)。