1

アップ、オーバー、ダウン、hitTest の状態が異なる Flash Pro のボタンを作成しました。マウスを上に移動すると、上から上に切り替わります。マウスを下に押すと、1 フレームの間、一時的に上から上に戻り、その後下の状態に切り替わります。これがバグと見なされるかどうかはわかりませんが、AS3 がリリースされてから発生していると思います。これは、この件に関して私が見つけることができる唯一のスレッドです。

数年経ち、まだ起こっているので、AS3 SimpleButtons が mouseDown でちらつく (アップ状態を示す) のを止める方法について、誰か新しいアドバイスはありますか?

それに失敗して、自分のボタンを転がすしか方法がない場合、カスタムの hitTest 形状をサポートする自家製のボタン クラスの例を誰かが持っていますか?

4

1 に答える 1

0

私のハックな回避策は、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);
    }
}
于 2012-07-30T13:05:31.983 に答える