静的インスタンス(シングルトン)を残して、イベントベースで作業することをお勧めします。ここで、すべての関数を公開しますが、これは望ましくありません。カスタムイベントを使用するのはそれほど難しくありません。これがメインクラスの外観です。
public class Main extends MovieClip
{
public function Main()
{
this.addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);
}
public function handleAddedToStage(event:Event)
{
this.removeEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);
this.showWelcomeScreen();
stage.addEventListener(ScreenEvent.SHOW_WELCOME_SCREEN, handleScreenEvent);
stage.addEventListener(ScreenEvent.SHOW_LEVEL, handleScreenEvent);
}
private function handleScreenEvent(event:ScreenEvent):void
{
switch (event.type)
{
case ScreenEvent.SHOW_WELCOME_SCREEN:
{
this.showWelcomeScreen()
break;
}
case ScreenEvent.SHOW_LEVEL:
{
// event.data contains level number
this.startLevel(event.data);
break;
}
default:
{
trace("Main.handleScreenEvent :: Cannot find event.type '" + event.type + "'.");
break;
}
}
}
private function showWelcomeScreen():void
{
trace("show WelcomeScreen")
//some private code in here
}
private function startLevel(level:int):void
{
trace("start level: " + level)
//some other private code here
}
}
これは、カスタムイベントクラスがどのように表示されるかを示しています(ScreenEvent.as)。dataと呼ばれるオプションのパラメータがあることに注意してください。これには、任意の値(オブジェクト、数値、文字列など)を渡すことができます。できるだけ明確な例として、両方のアクションに1つのイベントクラスを使用しました。さらに詳細なパラメーターを使用して、他のアクションに対してより具体的なカスタムイベントを作成することもできます。たとえば、 ScreenEvent、LevelEvent、PlayerEvent、GameEventなどの名前を使用します。 ..
クラスの最上位には、(静的定数)タイプが定義されています。イベントにはゲッターのみを含める必要があります。
package
{
import flash.events.Event;
public class ScreenEvent extends Event
{
public static const SHOW_WELCOME_SCREEN:String = "ScreenEvent.showWelcomeScreen";
// event.data contains level number
public static const SHOW_LEVEL:String = "ScreenEvent.showLevel";
private var _data:String;
public function ScreenEvent(type:String, data:String):void
{
super(type);
this._data = data;
}
public function get data():String
{
return this._data;
}
override public function clone():Event
{
return new ScreenEvent(this.type, this._data);
}
}
}
..コードのどこにいても、イベントをステージにディスパッチできます。
// dispatch event to Main (stage). Should show welcome screen in our case
stage.dispatchEvent(new ScreenEvent(ScreenEvent.SHOW_WELCOME_SCREEN));
// show level 2
stage.dispatchEvent(new ScreenEvent(ScreenEvent.SHOW_LEVEL, 2));
私は知っています、それはもう少しコードです、それは最初はもっと難しいように見えます、しかしプロジェクトが成長するならば、それは大いに役立つでしょう。イベントとの違いは、「これが発生する可能性があり、発生した場合は、 「ここでこれを実行し、あちらで実行する」の代わりに「これを実行する」です。利点は、メインクラスのイベントリスナーを削除しても、何も壊れないことです(緩く)結合)。これにより、保守が容易になり、シングルトンが節約され、必要に応じてMainクラスを拡張することができます。