【问题标题】:AS3 Mouse_Over Getting StuckAS3 Mouse_Over 卡住了
【发布时间】:2014-01-22 08:04:06
【问题描述】:

我在舞台上填充了许多按钮。它们都是在第一帧和第二帧上具有开和关状态的影片剪辑。问题是当您快速将鼠标悬停在按钮上时,有时它会卡在过度状态。有什么我想念的吗?

public class SimpleRollOverButton extends MovieClip
{
    private var _selected:Boolean;

    public function SimpleRollOverButton()
    {
        // EVENTS
        this.addEventListener(MouseEvent.CLICK, onClick, false, 0, true);
        this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
        this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);

        enable();


    }
    //
    // PUblic functions
    //
    public function enable():void
    {

        this.selected = false;
        this.gotoAndStop(1);
        this.mouseEnabled = this.mouseChildren = true;
        this.buttonMode = true;


    }
    public function disable():void
    {   

        this.mouseEnabled = this.mouseChildren = false;
        this.buttonMode = false;
    }
    public function onState():void
    {
        this.disable();
        this.selected = true;

        this.gotoAndStop(2);

    }
    public function offState():void
    {
        this.enable();
    }

    //
    // Private Functions
    //
    protected function onClick(e:MouseEvent):void
    {
        onState();
    }
    protected function onMouseOver(e:MouseEvent):void
    {
        this.gotoAndStop(2);
    }
    protected function onMouseOut(e:MouseEvent):void
    {
        this.gotoAndStop(1);    
    }

    //
    // ACCESSORS
    //
    public function get selected():Boolean
    {
        return _selected;
    }

    public function set selected(value:Boolean):void
    {
        _selected = value;
    }


}

【问题讨论】:

    标签: actionscript-3 mouseevent mouseover


    【解决方案1】:

    您可以将侦听器添加到舞台或包含按钮的 MovieClip(如果它有背景,并且不透明):

    stage.addEventListener(MouseEvent.ROLL_OVER, turnThemOff); 
    function turnThemOff(evt:MouseEvent):void {
        for (var i:int=0; i<yourButtons.length; i++) yourButtons[i].gotoAndStop(1);
    }
    

    如果您将鼠标从 SWF 影片上快速移开,这可能会有所帮助:

    stage.addEventListener(Event.MOUSE_LEAVE, turnThemOff);
    

    【讨论】:

    • 感谢您的回复。我在这个答案中遇到的问题是,还有一堆其他加载的资产也有事件监听器。如果舞台上只有这些按钮,这将是解决此问题的绝佳方式。你知道为什么 MOUSE_OUT 不开火吗?我是否应该在需要时删除和添加翻转并推出监听器?
    • 只有当您快速移动鼠标时才会出现这种情况?尝试提高帧率。看看它是否以大约 50fps 的帧速率发生。
    猜你喜欢
    • 1970-01-01
    • 2012-06-23
    • 2021-10-08
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多