使用Action Script 3.0控制按钮翻转

时间:2014-09-28 21:31:59

标签: actionscript-3

我正在尝试将动作脚本2.0代码转换为3.0并遇到麻烦。我有多个按钮正在使用,并且希望每个按钮在滚动时转到并停在某个帧上,然后在推出时返回到第1帧。

在编码时我不是很精通,我可以让这个代码适用于一个按钮,但是当我将它应用到另一个按钮时,我会得到错误,它实际上是在播放所有帧。

button_201c.addEventListener(MouseEvent.ROLL_OVER, onMouseOver);
button_201c.addEventListener(MouseEvent.ROLL_OUT, onMouseOut);

function onMouseOver(e:MouseEvent):void {
    mouseEnabled = true;
    buttonMode = true;
    gotoAndStop(3);
}

function onMouseOut(e:MouseEvent):void {
    gotoAndStop(1);
}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是为通用简单按钮创建单个类。您可以通过以下方式将此类应用于库中的movieclip:library - > your_symbol - > rightclick - >属性 - >的即可。然后,您可以在舞台上拖动此符号的多个实例,它们都可以正常工作。

如果您需要某些按钮的变体(例如在悬停时添加声音),则扩展 SimpleButton 类并重载方法。这通常导致许多小类,这就是为什么你应该将它们存储在按钮包中:)

package buttons {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class SimpleButton extends MovieClip {

        public function SimpleButton() {
            addEventListener(MouseEvent.MOUSE_OVER, mOver);
            addEventListener(MouseEvent.MOUSE_OUT, mOut);
            addEventListener(MouseEvent.MOUSE_DOWN, mDown);

            buttonMode = true;
        }
        protected function mOver(e:MouseEvent):void {
            gotoAndStop(2);
        }
        protected function mOut(e:MouseEvent):void {
            gotoAndStop(1);
        }
        protected function mDown(e:MouseEvent):void {}
    }
}

答案 1 :(得分:0)

代码中的问题是,当代码在onMouseOver时,它失去了对事件发生的按钮的引用。 要找到获得该事件的按钮,您可以使用e.currentTarget。

你不需要mouseEnabled和buttonMode - 当它到达那里时你可以确定你的按钮已经设置。

所以代码是

button_201c.addEventListener(MouseEvent.ROLL_OVER, onMouseOver);
button_201c.addEventListener(MouseEvent.ROLL_OUT, onMouseOut);

function onMouseOver(e:MouseEvent):void {
    e.currentTarget.gotoAndStop(3);
}

function onMouseOut(e:MouseEvent):void {
    e.currentTarget.gotoAndStop(1);
}

甚至更短的版本

button_201c.addEventListener(MouseEvent.ROLL_OVER, function (e:MouseEvent) {    e.currentTarget.gotoAndStop(3);    });
button_201c.addEventListener(MouseEvent.ROLL_OUT, function (e:MouseEvent) {    e.currentTarget.gotoAndStop(1);    });