1

我在 Flash Pro 中创建了一个具有不同 up、over、down 和 hitTest 状态的按钮。当我将鼠标移到它上面时,它会从 up 切换到 over。当我按下鼠标时,它会再次短暂地从 over 变为 up 一个帧,然后切换到 down 状态。我不确定这是否被认为是一个错误,但我认为它自 AS3 发布以来就一直在发生。这是我能找到的关于这个主题的唯一线索。

既然已经有几年了,而且还在发生,有没有人有任何关于如何阻止 AS3 SimpleButtons 在 mouseDown 上闪烁(显示向上状态)的新建议?

失败了,如果唯一的方法是滚动我自己的按钮,有没有人有一个支持自定义 hitTest 形状的本土按钮类的例子?

4

1 回答 1

0

我的 hacktastic 解决方法是继续使用 SimpleButton 但覆盖状态更改。我将 upState、overState 和 downState 设置为同一个容器精灵,然后监听鼠标上/下/下/出,并在正确的时间将我想要的显示对象插入到该容器中。它感觉不是一个可靠的解决方案,但它适用于我的目的。

我的简化代码:

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 回答