1

我正在尝试制作一个关卡选择屏幕,而不是将一堆关卡选择按钮复制并粘贴到我的关卡选择屏幕上,我想尝试使用代码创建和定位按钮,以便在未来获得更多的灵活性。我在执行此操作时遇到了一些问题……主要问题是我的自定义导航事件,无论出于何种原因,都无法从我的按钮类冒泡到我的主文档类。

我在我的项目中使用了 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 ) );                        }

        }
    }
}

导航事件类

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" ); 
        }
    }
}
4

1 回答 1

1

如果您希望事件冒泡,则需要将该bubbles属性设置为 true。

dispatchEvent( new NavigationEvent(NavigationEvent.START, true) );
于 2013-09-05T23:31:45.120 回答