私のハックな回避策は、SimpleButtonを使い続けながら、状態の変化をオーバーライドすることです。upState、overState、downStateを同じコンテナースプライトに設定してから、マウスのup / over / down / outをリッスンし、必要な表示オブジェクトをそのコンテナーに適切なタイミングで挿入します。固溶体のようには感じませんが、私の目的には役立ちます。
私の簡略化されたコード:
public class ButtonController
{
protected var button:SimpleButton;
protected var container:Sprite;
protected var upState:DisplayObject;
protected var overState:DisplayObject;
protected var downState:DisplayObject;
public function ButtonController(button:SimpleButton) {
this.button = button;
upState = button.upState;
overState = button.overState;
downState = button.downState;
container = new Sprite();
button.upState = container;
button.overState = container;
button.downState = container;
container.addChild(upState);
button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
button.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
button.addEventListener(MouseEvent.ROLL_OVER, mouseOver);
button.addEventListener(MouseEvent.ROLL_OUT, mouseOut);
}
protected function mouseDown(...ig):void {
container.removeChildAt(0);
container.addChild(downState);
}
protected function mouseUp(...ig):void {
container.removeChildAt(0);
container.addChild(overState);
}
protected function mouseOver(...ig):void {
container.removeChildAt(0);
container.addChild(overState);
}
protected function mouseOut(...ig):void {
container.removeChildAt(0);
container.addChild(upState);
}
}