あなたの質問は基本的にOOPと構造プログラミングの違いを示しています。 OOPを学ぶことは良い決定です、あなたはそれを好きになり、あなたの人生を楽にします。
私はあなたの理論とあまり気にしないようにしようとします - 私はあなたが後で学びます確信している - しかし、あなたはあなたのプロジェクトを完了するのに役立ちます。すべての
まず、私はそれがに良い習慣だと言うだろう包括的なUIアセットごとに別々のクラスを用意してください。これは、すべての画像やボタンではなく、スライドショー、ログインフォーム、コントロール、サウンド/音量ボタンなど、同じ目的を果たすオブジェクトのグループのためではありません。このようなクラスには、インタラクション。それはModel-View-Controllerと呼ばれる原理の一部です。あなたは後でそれを知ることができますが、ポイントはimages_mcと関連するオブジェクトのための別のクラスを持つ必要があります。ドキュメントクラスに作成し、ドキュメントステージへの参照を与えます。
slideShow = new SlideShow(this);
と
package {
import flash.display.MovieClip;
public class SlideShow {
private var images : MovieClip;
public function SlideShow(stageRef : MovieClip) {
images = stageRef['images_mc'] as MovieClip;
}
}
}
注:私は原稿台呼び出すことは舞台ではない、それは最初のムービークリップです。
OOPで従うべき第2の原則は、encapsulationです。あなたのSlideShowにimages_mcがあることを誰も知ってはいけません。あなたはそれを再生したり停止したりすることができます。代わりに他のオブジェクトは、詳細を知らずにスライドショー全体を再生または停止できることを知っておく必要があります。
public function stopShow() : void {
images.stop();
}
とドキュメントクラスのショーを停止したい場合は、単に
slideShow.stopShow();
注意を呼び出します:遊びのようなメソッドに名前を付けないように注意してくださいので、あなたは、スライドショーのクラスで、このような公共の機能を持っている必要がありますあなたのクラスがMovieClipを継承している場合は、そのクラスをオーバーライドする必要はありませんが、それは別のストーリーです)。
MVCは、そのうちの一つである:それは/アクセスしているすべてのこれらのクラスを制御することになると
は今、いくつかのアプローチがあります(ドキュメントクラス可能)コントローラ内の参照のほとんどを維持してみましょうそれは何をすべきかを決める。あなたのViewクラス(SlideShowのような)がステージ参照上のイベントをディスパッチさせるようにしてください(ドキュメントステージは実際にはMovieClipであり、それはEventDispatcherも意味します)、コントローラはそれらをlistenし、stopShow()のようなメソッドを呼び出します。
イベントに慣れていない場合、このコントローラー全体の概念が混乱する場合は、すべてのクラスへのすべての参照を1つの特別なクラスに置き、作成したすべてのクラスのコンストラクターに渡します。それは混乱ですが、スライドショーのような小さなプロジェクトでは大丈夫です。
EDIT
イベント処理:
それはあなたのスライド・ショーのために複雑すぎるかもしれないが、これは大きなプロジェクトでそれを行う方法です。あなたはあなたのUI2クラスでフォームフィールドとボタンがあり、提出のフォームフィールドからテキストを含むカスタムイベントを送出するとしましょう:
private var formField : TextField;
private var submitBut : SimpleButton;
とコンストラクタで:
formField = stageRef['form_txt'] as TextField;
submitBut = stageRef['submit_but'] as SimpleButton;
submitBut.addEventListener(MouseEvent.CLICK, buttonHandler);
あなたは
private funstion buttonHandler(e : MouseEvent) : Void {
var customEvent : CustomEvent = new CustomEvent(CustomEvent.FORM_SUBMIT);
customEvent.text = formField.text;
this.dispatchEvent(customEvent); //check the note
}
注:フォームフィールドからテキストを運ぶカスタムイベントを送出しますハンドラのプロパティを必要とする今、あなたはそれを派遣していますこのクラスからEventDispatcherを継承してください。最終的には、stageRefからハンドラをディスパッチすることができます(コンストラクタにハンドラで使用するために格納します)。
は、コントローラ/ドキュメントクラスに耳を傾ける:
ui2.addEventListener(CustomEvent.FORM_SUBMIT, doSomething);
カスタムイベントは、この(簡単にするために、それはsettter /ゲッターなしです)のようになります。
package {
import flash.events.Event;
public class CustomEvent extends Event {
public static const FORM_SUBMIT: String = "form_submit";
public var text : String;
public function CustomEvent (type : String) {
super(type);
}
}
}
これがちょうどです始まり、学習を続ける、幸運。
クラスファイルの構造を識別できるように、コードを記入してください。 –
これは、クラス構造を持っているわけではありません。インスタンスをアクセスする方法を見つけたら、そこから行くことができます。今のように、私はドキュメントクラスを持っており、クラスファイルはライブラリの各ムービークリップに結び付けられています(main_mcにはクラスファイルがあり、ui1には1、ui2には1があります)。各ファイルは、タイムラインの周りを移動するためにmain_mc(images_mcインスタンス)への参照を必要とします。基本的にUIクラスはimages_mcインスタンスを見つけることができる必要がありますので、私はムービークリップのフレームを選択するようにジャンプできます。 – Steve
私が知る必要があるのは、すでに外部のクラスファイルからステージ上のインスタンスを参照する方法です。助けてください、解決策はおそらく非常に簡単なので私は私の心を失っています。 – Steve