如何阻止SimpleButtons在mouseDown上闪烁?

时间:2012-07-29 20:20:11

标签: actionscript-3 flash

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

由于它已经存在了几年而且还在发生,有没有人对如何阻止AS3 SimpleButtons在mouseDown上闪烁(显示up状态)有任何新建议?

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

1 个答案:

答案 0 :(得分: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);
    }
}