封装动作,以便可以从鼠标事件或动画或某些事件结束执行

时间:2010-09-21 14:18:05

标签: actionscript-3

我经常在鼠标事件(例如,MouseEvent.CLICK)上执行一个必须移动到的函数/动作:

  • 发生在动画内部(在给定的帧标签处)
  • 发生在一个事件(例如,Event.COMPLETE)
  • 在将另一个项目添加到舞台或从舞台中删除时发生

封装此类活动的最佳OOP方式是什么,以便我不会不断重写代码?

顺便说一句,我还应该提一下,这个函数也从一个显示对象移动到另一个显示对象,而不是它正在监听的正常事件......

3 个答案:

答案 0 :(得分:1)

您可以设置事件处理程序以获取如下的单个参数:

protected function actionHandler(e:Event = null):void {
    //handler code here.
}

然后,您可以通过MouseEvent引用它,任何扩展Event的内容,或者在不是事件驱动的情况下调用它而不提供参数。在处理程序中测试e的类型(或者如果e为null)可以让您更精确地控制在特定情况下应该做什么。

只要处理程序不是真的用于在这些不同的事件/环境中做两个完全不同的事情,这应该没问题;但是,如果您真的在处理程序中分支操作,则应使用多个事件处理程序来创建更易于维护的代码。

答案 1 :(得分:0)

请原谅我,但我不明白你的意思是说你必须 将一个功能从一个显示对象移动到另一个显示对象

根据我的理解,您希望在其他事件中使用鼠标单击事件/功能(如您指定的那样),而不管它被调用的位置。

如果是这样的话&正如你所说,这个函数经常被使用,我会说它是一个静态函数。

答案 2 :(得分:-1)

如果多个对象共享公共函数,则可以创建对象可以子类化的Abstract类。

public class MyDisplayObjectAbstract extends MovieClip
{
     protected function mouseEventListener(event:Event):void
     {
          gotoAndStop('frameLabel')
     }

     protected function completeEventListener(event:Event):void
     {
        //do whatever
     }
}

然后,您可以将对象链接到如下所示的类,如果需要,可以覆盖某些函数

public class ObjectOne extends MyDisplayObjectAbstract
{
   override protected function mouseEventListener(event:Event):void
   {
       //do whatever
   }
}