とりあえずクラスでまとめる(CGame)

自分でも混乱してるのでとりあえずまとめてみました
これもまたいろいろとコードをいじっているので(CBoundingBoxがMath::Styleを継承したりしてる)
とりあえず簡単な説明もつけておきます


class IBaseReservoirObject

  • 保管庫クラス(CReservoir<C>)に格納できるオブジェクトの雛形
  • 参照カウンタを持っている(AddRef,Release)
  • 継承しないといけない仮想関数は以下のとおり
OnCreate 保管庫クラスがInitializeする時
OnInitilaize 保管庫クラスからこのオブジェクトを引っ張ってきた時
OnFinalize 保管庫クラスがいらなくなったこのオブジェクトを回収する時
OnDestroy 保管庫クラスがFinalizeする時

class CReservoirIterator<C>

  • 保管庫クラス(CReservoir<C>)のアクティブなオブジェクトを順に参照できるイテレータ
  • 使えそうな関数は以下のとおり
Object イテレータの示すオブジェクトのポインタを返す
operator= イテレータの代入
operator++ イテレータを進める
operator-- イテレータを後退させる
operator== イテレータの示すオブジェクトが同じものか判定する
operator!= イテレータの示すオブジェクトが違うものか判定する
IsEnd イテレータが終端かを判定する

class CReservoir<C>

  • オブジェクトを先に作っておいて、後から必要なときに取り出せるようにしたクラス
  • 使えそうな関数は以下のとおり
Initialize クラスを初期化する*
Finalize クラスを終了する
GetNewActiveObject オブジェクトを引っ張ってくる*
GetActiveObjectIterator アクティブなオブジェクトを順に参照できるイテレータを返す*

bool Initialize(int ObjectCount,void* pParam)

クラスを初期化する
int ObjectCount オブジェクトの格納数
void* pParam オブジェクトのOnCreateのパラメータ
返り値 成功したか(成功:true/失敗:false)

C* GetNewActiveObject(void* pParam)

オブジェクトを初期化して引っ張ってくる
void* pParam オブジェクトのOnInitializeのパラメータ
返り値 オブジェクトのポインタ(失敗:NULL)

CReservoirIterator<C> GetActiveObjectIterator(void)

アクティブなオブジェクトを順に参照できるイテレータを返す
返り値 アクティブなオブジェクトを順に参照できるイテレータ

注意
取得後は双方向リンクリストのダミーの部分を示しています
必ず最初にイテレータを1つ進めてください

class IBaseActorObject

  • IBaseReservoirObjectの継承クラス
  • アクター保管庫クラス(CActorReservoir<C>)に格納できるオブジェクトの雛形
  • 追加した使えそうな関数は以下のとおり
GetObjectType オブジェクトの種類を返す
SetKilled 消去フラグを立てる
IsKilled 消去されているか(されている:true/いない:false)
Kill このオブジェクトを消去する*

bool Kill(void)

このオブジェクトを消去する
  • protected関数です、かならずこのオブジェクト内部で呼び出してください
  • OnUpdate内部で呼び出すのが一番安全です
  • 追加した継承しないといけない仮想関数は以下のとおり
OnKill このオブジェクトが消去される時(このオブジェクトがKillする時)
OnUpdate 更新時(CActorReservoir<C>がUpdateする時)
OnDraw 描画時(CActorReservoir<C>がDrawする時)
OnAttack 自分の攻撃エリアが他のオブジェクトの防御エリアに衝突した時(CCollisionDetectorがCheckする時)
OnDefense 自分の防御エリアが他のオブジェクトの攻撃エリアに衝突した時(CCollisionDetectorがCheckする時)
UpdateParam パラメータの変更時に使用する(規格をあわせる意味で、別に仮想関数にするは必要ない)

class CActorReservoir<C>

  • 保管庫クラス(CReservoir<C>)の継承クラス
  • 追加した使えそうな関数は以下のとおり
Update アクティブなオブジェクトを一括更新
Draw アクティブなオブジェクトを一括描画

class CBoundingBox

  • バウンディングボックスを示すクラス
  • IBaseReservoirObjectとSelene::Math::Styleを継承している
  • 追加した使えそうな関数は以下のとおり
GetObject 衝突判定を送るオブジェクトを返す
SetEnable 有効/無効を設定する
IsEnable ボックスが有効か(衝突するか)を返す(有効:true/無効:false)
SetBox ボックスの大きさを設定する
TransformUpdate ボックスに適応する変換行列を最終設定する
  • 使い方
まずバウンディングボックスを生成後に、すぐSetBoxで大きさを指定する
cube.cpp/CCube::Initialize
  1. m_pAttackArea->SetBox(Math::Vector3D(-1.0f,-1.0f,-1.0f),Math::Vector3D(1.0f,1.0f,1.0f));
  2.  
その後、ボックスの変換行列を設定する
(動くものの場合、毎回の更新でいちいち変換行列をいじらないといけない)
cube.cpp/CCube::UpdateParam
  1. m_pAttackArea->TransformReset();
  2. m_pAttackArea->RotationQuaternion(m_Direction);
  3. m_pAttackArea->Translation(m_Position);
  4. m_pAttackArea->TransformUpdate();
  5.  
使い終わったらReleaseする
cube.cpp/CCube::Kill
  1. SAFE_RELEASE(m_pAttackArea);
  2.  

class CAttackArea

  • バウンディングボックス(CBoundingBox)の継承クラス
  • 今はCBoundingBoxそのものだが、将来のために一応あけておく

class CDefenseArea

  • バウンディングボックス(CBoundingBox)の継承クラス
  • 今はCBoundingBoxそのものだが、将来のために一応あけておく

class CCollisionDetector

  • バウンディングボックスの衝突判定クラス
  • 使えそうな関数は以下のとおり
Initialize クラスを初期化する
Finalize クラスを終了する
Check アクティブで有効な衝突エリアを一括で衝突判定
DrawCollision 衝突エリアを線で表示(攻撃エリア:赤/防御エリア:青)
CreateAttackArea 攻撃衝突エリアを生成
CreateDefenseArea 防御衝突エリアを生成

class CCube

  • IBaseActorObjectの継承クラスでキューブをあらわすクラス
  • 追加した使えそうな関数は以下のとおり
SetPosition オブジェクトの位置を設定する
SetDirection オブジェクトの方向を設定する
SetVelocity オブジェクトの速度を設定する
SetRotation オブジェクトの回転速度を設定する
UpdateParam オブジェクトのパラメータを更新する
注意
必ずパラメータを設定した後はUpdateParam関数を行ってください

class CCubeReservoir

  • CActorResevoir<CCube>の継承クラス
  • private継承なので一から関数を宣言してある
Initialize クラスを初期化する
Finalize クラスを終了する
GetNewActiveObject オブジェクトを引っ張ってくる
GetActiveObjectIterator アクティブなオブジェクトを順に参照できるイテレータを返す
Update アクティブなオブジェクトを一括更新
Draw アクティブなオブジェクトを一括描画
注意
取得後は双方向リンクリストのダミーの部分を示しています
必ず最初にイテレータを1つ進めてください

class CGame

  • まとめ上げるクラス
Initialize クラスを初期化する
Finalize クラスを終了する
Update 更新処理
CheckCollision 衝突判定処理
Draw 描画処理
SetDrawOption 描画オプションを設定
CreateAttackArea 攻撃衝突エリアを生成
CreateDefenseArea 防御衝突エリアを生成
CreateCube キューブを生成

class CApp

  • まとめ上げるクラスその2
Initialize クラスを初期化する
Run クラスを実行する
Finalize クラスを終了する
  • 使い方(といっても固定)
  1. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
  2. {
  3. CApp App;
  4. if(App.Initialize())
  5. {
  6. App.Run();
  7. }
  8. //
  9. App.Finalize();
  10. //
  11. return 0;
  12. }
  13.  

なんかめちゃくちゃ・・・

最終更新:2009年06月14日 03:15
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。
添付ファイル