ZerOx4Cの日記だったもの

インポートだけしました

Singletonパターンとフラグ

あと47日でゲームを完成させないといけないので焦り気味です。課題なんてどうでも・・・
今日はちょっとコアライブラリを書き換えました。ただちょっと邪悪な感じもします。


書き換えた部分というのは、ゲーム全体の基本情報(FPSとかウィンドウタイトルとか)を保持する静的クラスで、ここに汎用フラグリストを追加しました。
まぁ、フラグは乱用するとあんまりよろしくないのですが、たとえば30fpsで動作するゲームの場合、キーを押したらメッセージを次に進めるような処理に何も気を使わないとユーザーは「30分の1秒だけキーを押す」という超人的動作を強いられるのですが、これを解決するのにただのbool型のフィールドを作っただけだと、

if (マウスがクリックされている状態) {
    if (!mouseFlag) {
        //
        // 処理がごにょごにょごにょ
        //
    }
}
mouseFlag = マウスがクリックされていたらtrue、じゃなかったらfalse;

となるわけですね。これ、マウスだけならこれで済みますけど、他のキーにも使うとひどいことになります。しかもクラスを跨ぐとstaticにする必要があるのでもうカオスですね。

そこでもともとstaticである基本情報クラスにDictionaryなFlagsを追加したわけです。これを使うと、

if (マウスがクリックされている状態) {
    if (!Game.Flags[MouseButton.PrimaryButton]) {
        //
        // 処理がごにょごにょごにょ
        //
    }
}
Game.Flags[MouseButton.PrimaryButton] = マウスがクリックされていたらtrue、じゃなかったらfalse;

とすることができます。キーボードの実装をしても、Game.Flags[Keys.A]とかすればいいので多分見やすいはず。やったね!


こんなことしなくてもいいような実装方法があったらぜひコメントしてくださいね!(恥ずかしいから!