ちょっと間があきましたが、この間にクラス構成が決まりました。
クラスだけに拡張性は高いのが当たり前でしょうが、前回よりも拡張性高いと思くなったと思います。
で、どうなったかというと次のとおりです。
TMainWnd-
主にWindows管理を行う。サーフェースのリストアのタイミングはこいつが他のクラスに知らせる。
初期化されるとシーン管理オブジェクトとリソース管理オブジェクトを作成する。
TResrcManager-
ゲーム中で使われるサーフェース、サウンド、BGMなどのファイルを管理する。
TSceneManager-
ゲーム本体。メインループをのっとり、内部でシーンを実行する。
初期化されると、仮想バックバッファとレンダリングマシンを作成する。
TGameScene-
シーンの初期化、設定を行う。初期化されると、ゲームオブジェクト管理オブジェクトを作成し、メインループの内部で
ゲームオブジェクト管理オブジェクトのフレームを実行する。
TMovers-
主に、ゲームオブジェクトの管理を行う。ゲームオブジェクトのフレームを実行する。
TMover-
ゲームオブジェクト。処理の実装はこれを継承したオブジェクトに行わせる。
TRenderingMachine-
描画情報を渡してやると、画面に転送してくれる。パラメータによって、回転、合成など
いろんな描画が可能。
「なんじゃこのわけわからん構造は?」と自分でも思うんですが、こうなってしまったからしょうがないんです。
このわけわからん構造は決してやみくもに作られたわけではなくて、Windowsモードとフルスクリーンモードを切り替えられる
ようにしようと思って作ったらこうなっちゃったんです。まぁそのへんは「セーフティープログラマーズ」の一人を
目指しているので、できるだけWindowsと仲良しにしなければならないのです...。
さて、じつはこのクラス構成にひとつだけ「ほとんど無意味」なクラスがあります。
それは「TGameScene」です。こいつは「シーンの初期化」が主な内容なんですが、実はこれいらないんです。
シーンの初期化、切り替えなどは「TMover」を継承したクラスにやらせればいいことなんです。そうすれば
依然悩んでいた「シーン切り替えのときのデータの受け渡し」問題も一気に解決するんです。
ちゅうことで、「TGameScene」、君は解雇。短い付き合いだったけど、いいことを気づかせてくれてありがとう。
またね。
|