【问题标题】:AS3 Button StatesAS3 按钮状态
【发布时间】:2011-02-10 20:31:57
【问题描述】:

我的舞台上有 7 个按钮(按钮 A、按钮 B 等)所有 MC。 我想用 AS3 控制 RollOver、RollOut 和 CLick。

起初我以为我可以告诉按钮 Listener 去哪里

即gotoAndStop(2) 这是 RollOver 状态。 或 gotoAndStop(3),即 Click 状态。 和 gotoAndStop(1),即 RollOut 状态。

但是当我“点击”然后推出时,我需要按钮保持“点击”状态,直到“点击”其他按钮。

似乎无法弄清楚这一点。任何帮助将不胜感激。

【问题讨论】:

    标签: actionscript-3 button mouseevent event-listener


    【解决方案1】:

    如果你用数字来命名你的按钮会更快更有效。 button1, button2, button2.. 这将允许您编写 for 循环以轻松执行功能

    // loop through the buttons and give them mouse click listeners
    for ( var i:int = 1 ; i <= 7; i++ ){
        var curButton:MovieClip = getChildByName ("button"+i);
        // set click lisitener
        curButton.addEventListener ( MouseEvent.CLICK, buttonClickHandler );
        // set rollover listener
        curButton.addEventListener ( MouseEvent.ROLLOVER, buttonRollOverHandler );
        // set rollout listener
        curButton.addEventListener ( MouseEvent.ROLLOUT, buttonRollOutHandler );
    
        // set initial state
        curButton.gotoAndStop(1);
    }
    
    function resetStates (){
        for ( var i = 1; i<=7; i++){
           var curButton = getChildByName("button"+i);
           curButton.gotoAndStop(1);
        }
    }
    
    function buttonRollOverHandler ( evt:MouseEvent ){
        resetStates();
        evt.target.gotoAndStop(2);
    }
    function buttonRollOutHandler ( evt:MouseEvent ){
        resetStates();
    }
    function buttonClickHandler ( evt:MouseEvent ){
        resetStates ();
        evt.target.gotoAndStop(3);
    }
    

    【讨论】:

    • +1,虽然我最初可能会将按钮放在一个数组中,而不是依赖于使用 getChildByName。
    • @Allan @guacamoly 在您的帮助下,我想出了第一部分,谢谢!现在我需要运行整个动画,直到用户与之交互。所以换句话说,我需要模拟按顺序(从第一个到最后一个)按下的按钮,直到用户实际与幻灯片交互。
    • 您可以使用 setInterval 方法来做到这一点。 setInterval 允许您在特定时间间隔后调用函数。在文档中查找。每次调用该函数时,都会切换下一个按钮的状态并重置其他按钮。要在用户将鼠标悬停在任何按钮上时停止动画.. 在 buttonRollOverHandler 中使用 clearInterval。并让它重新启动 setInterval 到 buttonRollOutHandler 中的相同动画函数
    【解决方案2】:

    嗯……

    我会将翻转和按下功能保持在按钮元素的范围内,并为永久单击状态执行第二帧。

    [这是快速编写的代码,但你会明白的]

    您似乎需要为每个按钮设置一些父“重置”功能和单独的点击处理程序。

    buttonA.addEventListener(MouseEvent.MOUSE_DOWN, buttonADown);
    
    
    function resetButtons(){
        buttonA.gotoAndStop(1);
        buttonB.gotoAndStop(1);
        buttonC.gotoAndStop(1);
        buttonD.gotoAndStop(1);
        buttonE.gotoAndStop(1);
        buttonF.gotoAndStop(1);
        buttonG.gotoAndStop(1);
    }
    
    function buttonADown(e.Mouse_Event):void{
    
        resetButtons(); //RESET ALL PREVIOUSLY CLICKED BUTTONS
        buttonA.gotoAndStop(2);
    }
    
    // and so  on down the line....
    

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 2015-11-15
      相关资源
      最近更新 更多