我正在尝试将动作脚本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);
}
非常感谢任何帮助!
答案 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); });