我一直在尝试自己想出一个好的解决方案。我发现的最佳解决方案是使用装饰器模式,您可以使用一个类来装饰另一个类。假设我想从 flash 中加载一个按钮并将翻转行为封装在按钮中,它可能看起来像这样:
public class AnimatedButton extends Sprite
{
private var mc:MovieClip;
public function AnimatedButton( mc:MovieClip )
{
this.mc = mc;
addChild(mc);
mc.addEventListener(MouseEvent.CLICK, onClick);
mc.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
mc.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
}
protected function onClick ( event:MouseEvent ):void
{
mc.gotoAndPlay("clicked");
dispatchEvent( event) );
}
protected function onRollOver ( event:MouseEvent ):void
{
mc.gotoAndPlay("over");
dispatchEvent( event) );
}
protected function onRollOut ( event:MouseEvent ):void
{
mc.gotoAndPlay("out");
dispatchEvent( event );
}
}
然后当我想将翻转状态添加到按钮时,我会像这样装饰它:
private var btn:AnimatedButton = new AnimatedButton( new FlashButton() );
这基本上创建了具有新装饰功能的按钮。很酷的事情是现在我可以在任何具有“over”“out”和“clicked”框架的按钮上使用它。