2012-07-29 65 views
1

我在Flash Pro中使用不同了,过去,下来,则hitTest状态创造了一个按钮。当我将鼠标移到它上面时,它会从上至下切换。当我按下鼠标下来,从简单到再次变为了单个帧,然后切换到关闭状态。我不确定这是否被认为是一个错误,但我认为自AS3发布以来它一直在发生。 This is the only thread我可以找到关于这个问题。如何从闪烁的鼠标按下停止SimpleButtons?

既然已经过了几年,它仍然在发生,没有人有任何关于如何阻止AS3 SimpleButton在mouseDown上闪烁(显示up状态)的新建议?

如果做不到这一点,如果唯一的办法就是推出自己的按钮,没有任何人有一个支持自定义则hitTest塑造本土的按钮类的例子吗?

回答

0

我hacktastic解决方法是使用SimpleButton的保持,但覆盖的状态变化。我把北部,夸大和唐斯泰特相同的容器精灵,然后侦听鼠标上/上/下/并在合适的时间插入显示对象我想要到该容器中。它不像一个固定的解决方案,但它适用于我的目的。

我的简化代码:

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); 
    } 
} 
+0

这种方法的鼠标悬停视觉效果出现之前增加了一个轻微的延迟。在传统的SimpleButton中,mouseover状态发生变化,然后在触发mouseover事件之前等待一帧。所以现在状态改变发生在一帧之后。 – 2012-08-10 23:04:06