动作脚本3根本问题。尝试从MoiveClip内的侦听器调用函数

时间:2015-04-17 12:16:19

标签: actionscript-3

请参阅附带的图片:我在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()。

code in banner keyframing structure

1 个答案:

答案 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 - 因为它随着时间的推移而发生。如果你想调用某些东西 - 你只能从过去(前一帧)调用方法。要么在第一帧上定义所有内容,要么学习如何管理这些需求(或者最好 - 开始使用类)。