自分でも混乱してるのでとりあえずまとめてみました
これもまたいろいろとコードをいじっているので(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
m_pAttackArea->SetBox(Math::Vector3D(-1.0f,-1.0f,-1.0f),Math::Vector3D(1.0f,1.0f,1.0f));
その後、ボックスの変換行列を設定する
(動くものの場合、毎回の更新でいちいち変換行列をいじらないといけない)
cube.cpp/CCube::UpdateParam
m_pAttackArea->TransformReset();
m_pAttackArea->RotationQuaternion(m_Direction);
m_pAttackArea->Translation(m_Position);
m_pAttackArea->TransformUpdate();
使い終わったらReleaseする
cube.cpp/CCube::Kill
SAFE_RELEASE(m_pAttackArea);
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
| Initialize |
クラスを初期化する |
| Run |
クラスを実行する |
| Finalize |
クラスを終了する |
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
CApp App;
if(App.Initialize())
{
App.Run();
}
//
App.Finalize();
//
return 0;
}
なんかめちゃくちゃ・・・
最終更新:2009年06月14日 03:15