我正在尝试创建一个关卡选择屏幕,而不是将一堆关卡选项按钮复制并粘贴到我的关卡选择屏幕上,我想尝试使用代码创建和定位按钮以获得更大的灵活性未来。我这样做时遇到了一些问题...主要的问题是我的自定义导航事件,无论出于何种原因,都无法从我的按钮类冒泡到我的主文档类。
我在我的项目中使用了20多个导航事件,所以我很确定问题不是我整个导航事件的方法,但问题是使用按钮类特有的。或者其他我想念的东西。无论如何,我将在下面发布代码。我做了一些痕迹试图弄清楚发生了什么。我的自定义导航事件类正在创建正确的事件,然后我的按钮类调度事件,但是在我的文档类中侦听此事件的代码永远不会运行。所以我假设将导航事件冒泡到顶部有一些问题。这是我最好的猜测,可能是完全不同的东西。如果你们也有不同的建议,如何通过完全重组我所做的事情来使我的关卡选择屏幕更好地工作,那也很好......但这有点神秘,我希望能让它以这种方式工作。非常感谢,这是相关的代码!
---注意:如果这有帮助,层次结构是 DocumentClass - > TitleScreen - > LevelSelectScreen - > LevelSelectButtons
LevelSelectScreen类
public class LevelSelectScreen extends MovieClip {
public var levelSelectButtons:LevelSelectButtons;
public function LevelSelectScreen() {
for (var i:int = 1; i<=2; i++)
{
levelSelectButtons = new LevelSelectButtons(i);
addChild(levelSelectButtons);
}
}
}
LevelSelectButtons类
public class LevelSelectButtons extends SimpleButton {
public var levelNumber:int;
public var levelSelectScreen:LevelSelectScreen;
public function LevelSelectButtons(i) {
x = 200;
y = 100 + 50*i;
addEventListener(MouseEvent.CLICK,LevelSelectClicked,false,0,true)
levelNumber = i;
}
public function LevelSelectClicked(mouseEvent:MouseEvent):void
{
if (levelNumber == 1)
{
dispatchEvent( new NavigationEvent( NavigationEvent.START ) );
}
if (levelNumber == 2)
{
dispatchEvent( new NavigationEvent( NavigationEvent.STAGE2 ) ); }
}
}
}
NavigationEvent类
package
{
import flash.events.Event;
public class NavigationEvent extends Event
{
public static const START:String = "start";
public static const LEVELSELECTSCREEN:String = "levelselectscreen";
public static const STAGE2:String = "stage2";
public function NavigationEvent( type:String, bubbles:Boolean = false, cancelable:Boolean = false )
{
super( type, bubbles, cancelable );
trace(type);
}
public override function clone():Event
{
return new NavigationEvent( type, bubbles, cancelable );
}
public override function toString():String
{
return formatToString( "NavigationEvent", "type", "bubbles", "cancelable", "eventPhase" );
}
}
}
答案 0 :(得分:1)
如果您希望事件冒泡,则需要将bubbles
属性设置为true。
dispatchEvent( new NavigationEvent(NavigationEvent.START, true) );