インタフェースとディスクリプタ

Springheadでは仕様と実装を明確に分離するために,インタフェースクラスと実装クラスが分けられています. ユーザはインタフェースクラスのみを使用してSpringheadの機能を利用します. ただし,BaseFoundationモジュールにあるごく基本的なクラス,およびFrameworkのアプリケーションクラスは例外となっています.

また,Springheadのクラスにはそれぞれにディスクリプタが用意されています.ディスクリプタとは,そのクラスの読み書き可能な属性のみを集めた構造体です. ディスクリプタを利用することで,同じ設定のインスタンスを多数設定することが用意になります. また,ディスクリプタはファイルへのデータの保存や読み込みにおいても役立ちます.

以下にPhysicsモジュールの剛体を表すPHSolidクラスを例にとって説明します.

// given PHSolidIf* phScene, 

PHSolidDesc desc;
desc.mass = 1.0;

PHSolidIf* solid = phScene->CreateSolid(desc);

上のコードでPHSolidDescPHSolidクラスのディスクリプタです. まずそのメンバ変数massに値をセットすることで剛体の質量を設定しています. 次に,剛体を作成するためにCreateSolid関数が呼ばれます. ここでCreateSolidは物理シーンを表すPHSceneクラスのメンバ関数です. 実際にはPHSceneクラスのインタフェースPHSceneIfを取得する必要がありますが,ここでは既に得られているとしています. 剛体が作成されると,CreateSolidからインタフェースPHSolidIfのポインタが返されます. これ以降の剛体の操作はこのインタフェースを介して行います.

solid->SetMass(5.0);

基本的に,ディスリプタを介して設定可能な属性はインタフェースのGet/Set系関数を使って取得,設定ができるようになっています. 場合に応じて便利な方を使ってください.

Springheadオブジェクトはすべて内部でメモリ管理されていますので,ユーザが明示的にdeleteする必要はありません(また,してはいけません). Createされたオブジェクトはプログラムの終了時に自動的に破棄されます.