0

別々のフレームに配置したメニューウィンドウがたくさんあります(たとえば、メインメニューはフレーム1にあり、オプションメニューはフレーム2にあり、チャプターメニューはフレーム3にあり、文字メニューはフレーム4にあります)。各メニューには、クリックすると別のメニューページに移動する一連のテキストリンク(ムービークリップインスタンス)があります。これらの同じリンク(同じインスタンス)の一部は、同じ機能を実行するため、複数のページに複製されます。たとえば、「backToMain」インスタンスをクリックすると、クリックされたページに関係なく、メインメニューであるフレーム1に戻ります。

誰かが私がこれをどのように構築するかについての考えを持っていますか?これまで、すべてのリンクにリスナーを追加しようとしましたが、多くのリンクがフレーム1以外の異なるフレームにあるため、actionscriptにそのフレームに切り替えるように指示するまで、リスナーを追加できません。やりたい。最初に、すべてのリンクにリスナーを一度にグローバルに追加したいと思います。

var linksArray:Array = [newStory, continueStory, options, characters, backToMain, backToOptions, ... etc];

for each (var link:MovieClip in linksArray) {
link.addEventListener(MouseEvent.CLICK, onClick);
}

function onClick(e:MouseEvent):void
            {
                if (e.target.name == "newStoryLink") {

                    delegate.beginStory();

                } else if (e.target.name == "continueStory") {

                    // do something else
                } else if (e.target.name == "chapters") {

                    // do something else
                } else if (e.target.name == "options") {

                    // do something else
                }

前述のように、他のフレームに存在するインスタンスにリスナーを追加できないため、上記のコードは機能しません。基本的に、どのフレームにいるか、そのリンクのどのインスタンスがクリックされたかに関係なく、リンクがクリックされたときに何をするかをASに指示するコード。ありがとう。

4

1 に答える 1

0

上記のコメントで私が意味したことは次のとおりです。空のFlashファイルで次のことを試しました:

  • フレーム 1: 空のキーフレーム / 一部のコンテンツ
  • フレーム 10: 「someButton」という名前のボタンを持つキーフレーム

  • フレーム 1: 次のコード:

            import flash.events.MouseEvent;
    
            stage.addEventListener(MouseEvent.CLICK, onClick);
    
            function onClick(e:MouseEvent):void {
    
                if (e.target.name == "someButton")
                    trace("Button clicked");
    
            }
    

それでおしまい。フレーム 10 のボタンをクリックすると、メッセージが表示されます。

これが機能するのは、Flash がバブリング イベント モデルを使用しているためです。つまり、表示オブジェクト (ボタンなど) のほとんどの (すべての?) イベントは、親や親などにも渡されます。したがって、最終的に、CLICKボタンからのイベントはステージに到着し、onClickイベント ハンドラーによって処理されます。そこで、イベントの発生元のオブジェクト( Event.target) が とname等しいかどうかを確認しsomeButtonます。

を配置した場所にはtrace、メニュー項目がクリックされたときのロジックを配置するだけです。これはあなたが探していた機能ですか?

、などstageのプロパティをいじる必要はないことに注意してください。上記のコードを出発点として使用してください。buttonModemouseChildren

于 2012-04-15T19:22:32.980 に答える