【发布时间】:2010-12-25 08:10:03
【问题描述】:
这可能很简单,但我想不通。看一下代码,我将这个按钮类(CategoryButton)的 2 个实例移到了舞台上。正如您所看到的,当您单击一个按钮时,它应该 gotoAndPlay(3),将自身记录为 selectedBtn。单击第二个按钮时,它应该重新启用第一个按钮的侦听器,删除自己的侦听器并将自己设置为新选择的按钮。不幸的是,这段代码没有这样做。当我单击第一个按钮时,它会将按钮移动到第 3 帧,并删除其侦听器。我单击第二个按钮,它执行相同的操作,只是它不再为第一个按钮添加侦听器。
我是 AS3 新手,非常感谢任何帮助,谢谢。
package classes {
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.display.Sprite;
public class CategoryButton extends MovieClip{
//this stores the currently selected button
public var selectedBtn:Object;
public function CategoryButton() {
// listen for over
addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
}
protected function rolloverToggle(event:MouseEvent):void {
gotoAndStop(2);
removeEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle);
addEventListener(MouseEvent.CLICK, buttonToggle);
}
protected function rolloutToggle(event:MouseEvent):void {
gotoAndStop(1);
removeEventListener(MouseEvent.MOUSE_OUT, rolloutToggle);
addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
}
protected function buttonToggle(event:MouseEvent):void {
if(selectedBtn) {
trace(selectedBtn.name)
selectedBtn.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
selectedBtn.gotoAndStop(1);
event.currentTarget.removeEventListener(MouseEvent.MOUSE_OUT, rolloutToggle);
event.currentTarget.removeEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
event.currentTarget.removeEventListener(MouseEvent.CLICK, buttonToggle);
event.currentTarget.gotoAndStop(3);
selectedBtn = event.currentTarget;
}else {
selectedBtn = event.currentTarget;
trace(selectedBtn.name);
selectedBtn.removeEventListener(MouseEvent.MOUSE_OUT, rolloutToggle);
selectedBtn.removeEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
selectedBtn.removeEventListener(MouseEvent.CLICK, buttonToggle);
selectedBtn.gotoAndStop(3);
}
}
}
}
【问题讨论】:
标签: flash actionscript-3 oop class