2010-09-21 40 views
0

我经常有一个在鼠标事件(例如MouseEvent.CLICK)上执行的功能/动作,必须移动到:封装动作,以便可以从鼠标事件或动画或某个事件结束执行

  • 发生的动画的内部(在给定的帧标签)
  • 发生在事件(比如,Event.COMPLETE)
  • 发生时另一项目被添加到载物台或从台上移除

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

顺便说一句,我还要提到的是这个功能也正在从一个显示对象移动到另一个位置,而不是只是如果它被监听...

回答

1

你可以设置你的事件处理程序采取单一参数是这样的:

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

然后,您可以通过的MouseEvent引用它,任何扩展事件,或调用它没有的情况下其提供的参数不是事件驱动的。在处理程序中测试e的类型(或者如果e为null),可以更精确地控制在特定情况下要执行的操作。

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

0

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

从我了解的位中,您希望在其他事件(例如您指定的事件)期间使用鼠标单击事件/函数,而不管它将被调用的位置。

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

+0

我要澄清......说我有一个发了一封动作时用户单击显示对象A.但是然后...说客户端决定当显示对象B上的动画完成时,应该移动到相同的动作...封装这些动作以进行更改的最佳方式是什么? – redconservatory 2010-09-21 18:49:50

-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 
    } 
}