我在Flash Pro中创建了一个具有不同up,over,down和hitTest状态的按钮。当我将鼠标移到它上面时,它会从上到上切换。当我按下鼠标时,它会短暂地从一个帧向上再次移动到一个帧,然后切换到向下状态。我不确定这是否被认为是一个错误,但我认为自从AS3发布以来它一直在发生。 This is the only thread我可以找到这个主题。
由于它已经存在了几年而且还在发生,有没有人对如何阻止AS3 SimpleButtons在mouseDown上闪烁(显示up状态)有任何新建议?
如果失败了,如果唯一的方法是滚动我自己的按钮,是否有人有一个支持自定义hitTest形状的本土按钮类的示例?
答案 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);
}
}