0

5 つのボタンがあるメニューがあります。メニューは常に表示されます。メニュー項目ごとにクリック イベントがあります。対応するムービー クリップを左から右にスライドします。各ムービー クリップには、さまざまな自然イベントと、それぞれのアニメーションとアクティビティがあります。たとえば、タブ 1 でビデオ ページが表示されます。そのムービー クリップ内には、一時停止ボリュームの再生や完了などのビデオ イベントとコードがあります。タブ 2 には、時間用のボタン グループと別のボタン グループの機能があります。ユーザーの選択コードに応じて、値が計算され、アニメーション カウンターに表示されます。タブ 3 には、時間用のボタン グループとソース用のボタン グループがあります。ユーザーの選択に従って、値が計算され、アニメーション グラフとして表示されます。等々。

現在、個々のタブ ムービー クリップにはすべて、独自のイベント用の独自のタイム ライン コードがあります。いくつかのクロスオーバー変数と他のタブとの参照。すべてが期待どおりに機能しています。問題ない。タイム ライン コードが複雑なプロジェクトを実行するための最良の方法ではないことはわかっています。

したがって、それが正しい方法であれば、コーディング全体を 1 つまたは複数のクラスとして取得したいと考えています。クラスロジックに関しては初心者です。ドキュメント クラスとして Main を既に作成しており、タブの一般的なナビゲーションと初期の外観を制御できます。しかし、タブ固有のボタンイベントや、特定のタブのその他の固有のイベントで立ち往生しています。

どんな助けでも大歓迎です。前もって感謝します。同様の例または提案。

初めまして、素早い対応ありがとうございました。私も初心者ではないようです。たくさん読んで、おそらくすべての基本的な概念を徹底的に把握する必要があります。コメントで提案されている両方のリンクを確認しました。ゆっくり消化しようと思います。私は、OOP やあらゆる種類のプログラミングに関する正式な非公式の教育を受けていません。正直なところ、あなたが提案したコードを理解するのに苦労しています。あなたのコードのせいではなく、私のレベルの能力のせいです。イベントやシーケンスなどについて明確にするために、少し時間を費やす必要があります。さまざまなタブのコンテンツは、メイン タイムラインへのムービークリップとして、ステージ上に既に配置されています。対応するタブ ボタンのクリック イベントに出入りします。あなたの提案に基づいて、私はまだ自分の宿題をする必要があるので、私はあなたの答えを「はい」とマークしていません. どうもありがとうございました。

4

1 に答える 1

0

これは私がそれを設計する方法です:

ボタンのみを含み、それらのクリックをより具体的なイベントに「変換」するメニュークラスがあります。それは次のようになります。

public Class Menu extends Sprite {
     保護された var ボタン:ベクター。= 新しい Vector.();
     パブリック関数メニュー() {
         素晴らしい();
         var ループ:int = numChildren;
         for (var i:int=0; i<loops; i++) {
            var button:SimpleButton = getChildAt(i) as SimpleButton;
            if (ボタン) {
                ボタン[buttons.length] = ボタン;
                button.addEventListener(MouseEvent.CLICK, broadcastMenuEvent);
            }
         }
     }
     public function broadcastMenuEvent(e:Event):void {
         var button:DisplayObject = e.currentTarget as DisplayObject;
         dispatchEvent(new Event(button.name, true));//バブリング、どのレベルでもキャッチ可能
     }
}

この構築方法では、ステージ上のボタンのインスタンスに付ける名前を変更するだけで、ディスパッチされるイベントを変更できます。「自動的にインスタンスを宣言する」がチェックされていない場合、これが機能するためにクラスではなく基本クラスとしてメニューを適用する必要があることに注意してください。について知る必要はありません。

この時点で、別の場所でこれらのイベントを処理できます。それがメイン ドキュメントのクラスであるか、別のコントローラーを持っているかは関係ありません。

あなたが説明した各ビューも個別のクラスとして定義します。ステージ上を行き来するオブジェクトがある場合は、ここで説明するテクニックのいずれかを使用してそれを処理できます。それ以外の場合は、タイムライン コードではなく基本クラスからタイムライン インスタンスに対処するのはかなり簡単です。繰り返しますが、これらのイベントはメイン ドキュメントのクラスまたは専用のコントローラーでリッスンできます。主なポイントは、ビューが重要な決定を行っていないことを確認することであり、通常はデータを編集するべきではありません。

タブの追加と削除の方法をメイン ドキュメントで調整することもできます (私は goToAndStop でタイムラインを使用するのが大好きですが、誰もがこの設定を共有しているわけではありません)。専用コントローラー。ビューがどのように機能するかを一般化して、それらに単一のInterfaceを実装させることが可能であれば、それをお勧めします。そうすれば、それらに 1 つのインスタンス名を付けて、同じ getter/setter ペアですべてを管理できます (タイムライン ルートに進むと仮定します)。

この点に関して、Flash コンパイラはそれほど洗練されていないことに注意してください。そのため、これを行い、ビューが異なる親クラスを拡張すると、コンパイラの警告が表示されます。これらは無視してください。何の意味もありません。

コードから完全に根絶する必要があるのは、ビューが相互に参照している部分です。ある View が別の View を認識できるのは、親がその子を認識している場合のみです。その場合でも、できるだけ具体的な知識を持たないようにしてください。私が例として書いたメニュー ビューでは、親はいくつかの SimpleButtons がある可能性があることしか認識していませんが、それらがステージ上のどこにあるのか、具体的には何がそこにあるのか、さらにはインスタンス名が何であるかについての特定の知識はありません。

ビューにお互いを認識させる代わりに、状態変更の要求を (イベントの形で) あるものから別のものに転送するサード パーティ (ここでも、メインのドキュメント クラスを使用するかどうかを選択できます) を用意します。

于 2013-04-07T18:10:39.790 に答える