如何将事件侦听器添加到符号而不是实例as3

时间:2012-05-28 13:12:28

标签: actionscript-3 flash addeventlistener

我们有一个按钮符号,在多个场景中作为实例重复插入。 此按钮在场景之间链接,基本上执行相同的功能。

有没有办法将eventListener MouseEvent.CLICK添加到符号本身,这样我们就不必为每个场景中的每个实例重写一个监听器?

2 个答案:

答案 0 :(得分:2)

创建一个类,即'LinkingButton'。在这个类中创建一个单击处理程序,它可以做你想要的。

然后,您需要将您的班级“链接”到图书馆中的符号。

如果操作正确,您只需将符号拖到舞台上即可立即使用。或者,如果您更喜欢使用代码,它也很简单:

var myButton:LinkingButton = new LinkingButton();
addChild(myButton);

答案 1 :(得分:0)

您既不能在符号上接收鼠标事件(即Class),也不能从中发送任何事件。所以这是不可能的。

您可以创建一个新的Sprite符号,将自定义Button放入其中,然后在该Sprite内的框架脚本中添加一个侦听器 - 但这确实非常混乱。

最简单的方法是将Event.ADDED的监听器添加到阶段 - 只要在显示列表中的任何位置添加DisplayObject的任何新实例,就会捕获该监听器 - 并使处理函数添加适当的监听你的特殊按钮的每个实例:

 function onInstanceAdded( event:Event ) : void {
     if( event.target ) is MySpecialButton
         event.target.addEventListener( MouseEvent.CLICK, onSpecialButtonClick );
 }

 function onSpecialButtonClick( event:MouseEvent ) : void {
     doMagicStuffHere();
 }

 stage.addEventListener( Event.ADDED, onInstanceAdded );