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

        }
    }
}

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

1 に答える 1