Is there a way to make the main class - the one based on the main .fla - static? so we could use it as in java, being able to reference it from other classes, because I have to pass the instance of the main itself as a parameter to a class, otherwise I loose reference. I tried to add static prefix but seems as3 doesn't allow it.
2 に答える
AS3 には静的クラスの概念はありません。
シングルトン パターンを使用して、メイン クラスの一意のインスタンスを公開できます。
public class Main extends Sprite {
public static var instance:Main;
public function Main() {
instance = this;
}
static
...または、管理が難しくなりますが、他のプロパティ/メソッドを公開するようにマークするだけです。
ただし、使用するとコード設計が不適切になる場合があることを言及する必要があります(代わりに、インスタンスをコンストラクターを介して必要なクラスにstatic
渡すことができます)Main
これは一般的な答えではないことはわかっています...静的プロパティを使用してインスタンスを公開することは、本当に悪い考えです。Singleton アンチパターンは非常に人気がありますが、そうすべきではありません。悪い慣行につながり、クラスを不必要に相互に関連付けます。
他のクラスでメイン クラスを参照する必要があるかどうかを自問する必要があります。AS3 には、必要なすべての疎結合を提供できるイベント システムがあります。表示オブジェクトがメイン クラス インスタンスと通信する必要がある場合は、表示リストを介してイベントを送信することで実現できます。
依存関係管理の問題は、依存関係注入フレームワークによって最もよく処理されます (その多くは、イベント オーバー ザ ディスプレイリストをはるかに凌駕する集中メッセージング システムを備えています)。人気のあるもの (PureMVC、RobotLegs など) のいずれかがやり過ぎだと感じた場合は、簡単に (単純で限定的なもの) 自分で作成できます。
シングルトンや静的インスタンス アクセサーに頼らなくても済むようにするためのツールやパターンはたくさんあります。