私はこれに対する良い解決策を自分で考え出そうとしています。私が見つけた最善の解決策は、あるクラスを使用して別のクラスを装飾するデコレータ パターンを使用することです。フラッシュからボタンをロードし、ロールオーバー動作をボタンにカプセル化するとします。次のようになります。
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() );
これは基本的に、新しく装飾された機能を持つボタンを作成します。クールなのは、「オーバー」「アウト」および「クリック」フレームを持つ任意のボタンでこれを使用できるようになったことです。