はかせのラボ

私の頭の中を書いていく雑記ブログです

DirectX 魔改造 ~分割したよ~

あいさつ

もうそろ今月も終わりが見えてきて焦りを覚えているはかせです。
今やってる弾幕シューティングは今月で終わらせる予定なので。
今月と言ったら今月に作りきらなければならないのです。

前回の続き

前回シーン管理のための分割を行うと言いました。
おおむね最後のほうで話したような構成にできました。

流れとしては
①シーンクラスと機能クラスを生成
②シーンクラスがシーンに存在するオブジェクトを生成
③ゲームループ実行クラスを生成
④実行クラスにシーンクラスを登録

以上です。もう少し詳しく書きます。

シーンクラスと機能クラスを生成

機能クラスはFPS計測や入力などゲームオブジェクトではないもの全般です。

シーンクラスは各シーンを管理するクラスです。
機能としてはシーン上のオブジェクトを生成し所有します。
またシーンが始まった時、終わるときそして各オブジェクトの
更新処理の前にシーンの更新処理を行います。

シーンの更新処理としては機能クラスの処理がメインになると思います。
(入力状況の取得とかFPS計測とか)

シーンクラスがシーンに存在するオブジェクトを生成

シーンクラスの初期化で必要なオブジェクトを生成し
自分の管理配列に格納します。

ゲームループ実行クラスを生成

前回まで神クラスが行っていたゲームループを担当します。

//シーンが登録されて無ければ処理しない
if (!mScene) return;
//1フレームの処理を行う
mScene->SceneUpdate();
//コライダーを格納
mCollisionManager->SetGameObjects(mExcuteObjectsList);
Update();
mScene->SceneLateUpdate();
LateUpdate();
//衝突処理
mCollisionManager->Collision();
Render();
mScene->SceneEndFrame();

実装はシンプルに登録されているオブジェクトの各処理を呼び出しています。
ゲームループの実行クラスですからこのくらいシンプルでいいのです。

衝突もこのクラスのループに入っていますが、
別クラスに切り出して使用しているので問題はないと認識しています。
(ループ以外のとこで勝手に衝突処理されても困るしね)

実行クラスにシーンクラスを登録

ゲームループを動かすシーンクラスを登録します。
あとはシーンクラスの各種処理と各オブジェクトの処理を実行します。

分割総括

シーンの切り替えは実行クラスに登録するシーンを変えるだけになりました。
これでシーンが増えても減っても大して苦労せずに済みます。
シーンの編集も各シーンクラスの編集だけで出来ます。

今後の予定

最初にも書きましたが期間がぼちぼちやばいですw
色んなものの基盤はできたもののブラッシュアップが出来ていない。
もっと言えば弾幕シューティングなんていう膨大な数のデータを
外部で管理する機構もまだ出来ていない。
他にもぽつぽつとやらなければならないことが・・・

とりあえず優先度をつけると
①ゲームとして成立させる
 敵が何体か出てきてゲームクリア、ゲームオーバーがあって
 それがループして正常に動く

②外部切り出し
 プログラムに埋め込んでいるデータを外部ファイルに出し
 そのファイルの編集だけでゲームの調整を出来るようにする

こんなかんじかなぁと思ってます。
まずはいい加減遊べるようにしたいですね。

それでは今回はこの辺でノシ

今回作ったものはgithubに上げました
github.com