2012-04-15 6 views
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に何をすべきかを伝えるコードです。おかげさまで

+0

だから何が問題なのですか? – Torious

+0

質問を読んでください、問題はコードが動作しないことです。他のフレームのインスタンスにリスナーを追加することはできません。 – Windbrand

+0

イベントリスナーを 'stage'に追加することができます。すべての 'CLICK'イベント*は最終的にそれにバブルアップするはずです。次に、上で説明した 'onClick'ハンドラのようなものを使用します。 – Torious

答えて

0

私は上記のコメントをどういう意味ですか。

  • フレーム1:私はちょうど空のFlashファイルに、次の試してみた空のキーフレーム/一部のコンテンツ
  • フレーム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)から起きたオブジェクトがsomeButtonに等しいnameを持っているかどうかをチェックします。

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

buttonMode,mouseChildrenなどstageのプロパティを使用する必要はありません。上記のコードを出発点として使用してください。

関連する問題