2

複数の子 SWF (Child_1、Child_2、Child_3) 間のユーザー ナビゲーションを処理する親 SWF (Parent) があります。

ユーザーが Child_1、Child_2、および Child_3 の間を横方向に移動できるように、子 SWF のナビゲーション ボタンにイベント リスナーを追加するにはどうすればよいですか?

私は2つのオプションを考えることができますが、どちらも機能させることはできません:

1) 親 SWF は、子をロードするときにイベント リスナーを設定します。そのため、親でローダーを使用して Child_1 をロードし、親で eventlisteners を Child_1.myNavigationform.myButton に追加します。

ここでの問題は、親がローダー インスタンスを処理するだけであり、Child_1 内の個々のオブジェクトにドリルダウンする方法が思いつかないことです。

2) Child_1 は、イベント リスナーを独自のオブジェクトに追加します。これは問題を逆転させるだけです。Child_1 はそれ自体のボタンに問題なくアクセスできますが、ユーザーがボタンをクリックすると、親のメソッドにアクセスする方法がないため、Child_2 をロードできます。

ここでの解決策は何ですか?これは頻繁に行われていると思いますが、これを処理する方法を説明しているものは見たことがありません。

ありがとうございました。

4

1 に答える 1

2

二人とも行けます。ただし、最初の方法は、疎結合の親ムービーと子ムービーを提供するため、より柔軟です。contentloaderinfo を介して子ムービークリップを取得できます。

_child1loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
_child1loader.load(child1URLRequest);
function onComplete(e:Event):void {
  _child1movie = MovieClip(e.target.content);
}
これを親ムービーに追加してその関数を呼び出し、リスナーをそのコンポーネントに追加できます。
2 番目のケースで、親ムービーの機能にアクセスしたい場合は、その機能を子のムービー内に配置する必要があります。(例:parent.somefunction();)。
そして、各子ムービーがイベントのディスパッチを介していくつかの機能を提供する実装がはるかに優れています(つまり、ローダームービー、つまりこの場合は親ムービーで使用できるnavigateNextEventなど)。その場合、実装は次のようになります。
public class Child1 extends MovieClip {
  ...
  private function onSomeButtonPressWhichWillAskParentToGoToNextChild():void {
    dispatchEvent(new Event("navigateNext"));
  }
  ...
}
...
public class Parent extends MovieClip{
 ...
 _child1movie.addEventListener("navigateNext", onNavigateNext);
 private function onNavigateNext(e:Event):void {
 //e.target is _child1movie, so you can play with it (hide it or throw it away etc...)
 //do actual naigation
 }
 ... 
}

于 2010-01-13T06:50:27.150 に答える