201.BaseCrossの全体の構成

 この章の目的はBaseCrossの構造と使い方を考察、レポートするものです。
 マニュアルとはちょっと違う形で考えてます。といいますのは、BaseCrossはこれまでもそうであったように、常にライブラリが修正され、機能追加されるゲームミドルウェアです。
 そのためマニュアルというFixされたものとは違い現時点のという意味合いが強いと考えています。
 ですから、このドキュメントも常に修正される可能性があるものと考えていただければと思います。
 また、すべての機能を網羅できるものではありません。中にはほとんど実行される可能性は低いが実装されいる機能もあります。こういったものについてはこのドキュメントに記述されない場合も多々あります。
 これらのあまり使われない機能は、将来的にはライブラリから削除されるか、もしくは形を変えて再実装される可能性があります。
 また、このドキュメントは考察、レポートの意味もあります。現時点ではこのように実装されているが、本当は別の形がいいかもしれないといった内容も含まれます。
 ですから、もし、現在の実装よりももっといい考え方、あるいは効率的な記述方法があれば、

BaseCrossゲームフレームワーク
開発日誌 -実験と実装と-
http://gameproject.jp/

 から、お問い合せいただければ、幸いです。
 また、この章の内容は基本的にサンプルはありませんので、コードを確認する場合はライブラリディレクトリ内を各自参照してください。サンプルがあったほうが理解しやすいと思われる項に関しては、サンプルを用意し、その旨記述いたします。

BaseCrossの全体の構成

 さて、この項のテーマはBaseCrossの構造です。ここでBaseCrossというのはBaseCrossフルバージョンのことです。
 シンプルバージョンはここで説明する機能はほとんど実装されません。ただSimpleSample015などはBaseCrossフルバージョンの機能をシンプルバージョンに実装する方法としてのサンプルが設置されてますので、そちらではこのドキュメントは、ほぼ有効と言えます。

 BaseCrossの基本的なクラス階層は以下のようになってます。

 

図0201a

 


 この階層図は、一番ざっくりとした階層図です。
 まず、BaseCrossの一番上位に位置しているクラスがAppクラスとなります。このクラスはシングルトンとして、WinMain.cpp内で作成されます。
 作成するにはApp::CreateApp()関数を使用します。
 この関数を実行した後は、ゲーム中どこからでもApp::GetApp()関数でシングルトンのインスタンスにアクセスできます。
 Appクラスに含まれるDeviceResourceクラス描画用のライブラリです。これはDx11、Dx12そして将来的にはOplenGLも対応するクラスです。ここでは詳しくは述べません。

 同様にAppクラスに含まれるSceneInterfaceクラスは、シーンの親クラスとなります。以下のような階層を持ってます。

 

図0201b

 

 シンプルバージョンでは、このSceneInterfaceクラスの派生クラスとしてシーンもしくはステージなどを作成します。その場合、必ずしもSceneStageなどの名前も必要ではありません。ゲーム盤を表現できるものであれば自分で決められます。
 フルバージョンはいわばライブラリ作成の1つの形であり、その例としてSceneBaseおよびStageという階層を使っているというわけです。
 フルバージョンに含まれるクラスLibsフィルタのSharedLib内にまとめられています。また描画系のフルバージョンライブラリは、Dx11であればDx11FulLibフィルタにまとめてあります。
 シングルトンであるAppクラス1つだけ含まれるのがSceneInterfaceクラス(のポインタ)です。フルバージョンではここにSceneのポインタが代入されます。
 ここでポインタというのはすべてスマートポインタです。BaseCrossC++11のコードです。ですからC言語由来のポインタを使うことはほとんどありません。C言語由来のポインタの場合は生ポインタと表現します。

 このように唯一のAppクラスに含まれる一つのSceneですから、当然Sceneのインスタンスも一つになります。Appクラスのようにシングルトンではありませんが、ほかにインスタンスを作成するメリットはありません。
 SceneBaseクラスSceneの親クラスです。この中にアクティブなステージ1つだけ含むことができます。
 ステージStageクラスの派生クラスとして作成します。そうするとシーンに含めることができるようになります。

 この項では、全体の構成を説明しました。次項ではStageクラスについて説明します。