大量の2Dスプライトを管理するクラスを管理するプロジェクトです。
2009.9/24
色々再調整しました
- スプライト生成時にテクスチャが重複した場合、同じスプライトを使いまわすことによりLock/UnLockによる負荷が激減しました。
- C2DSpriteTrackがリークしたままゲームを終了すると正常に終了出来ていなかったのを修正。
※衝突判定の実装の際IKD様が
ゲームつくろー!にて公開しています、4分木空間分割を使用しています。
この場を借りてお礼申し上げます。
2Dスプライト管理は
C2DSpriteManager C2DSpriteTrackを管理
└C2DSpriteTrack C2DSpriteObjectを管理
└C2DSpriteObject スプライト一つ分を扱うクラス
となっています。
実際に使用する際は
①まず適当なクラスにC2DSpriteTrackを変数として持ちます。
例: C2DSpriteTrack *pSpriteTrack;
②C2DSpriteManagerにスプライトを生成させ、データを受け取ります。
例: pSpriteTrack = g_p2DSpriteManager->Create( テクスチャ, 生成数 );
これでスプライトを使う準備が整いましたので、実際に使ってみます。
③C2DSpriteTrackに依頼を出してC2DSpriteObjectを受け取ります。
例その1: ランダムアクセス 速度はO(1)
C2DSpriteObject *pObj = pSpriteTrack->GetObject( インデックス );
例その2: リストアクセス
for( C2DSpriteObject *pObj = pSpriteTrack->GetTop(); pObj->Next() != NULL; pObj = pObj->Next() )
ここでpObjに設定したデータはそのまま反映されます。
④衝突判定をつける
スプライト個々に衝突判定をつける事が出来ます。
衝突の検知はコールバックメソッドを介して行います。
例: pObj->CreateTarget( this, TARGET_ATTACK, COL_CIRCLE, &DefAttackCallBack );
衝突判定をつけた場合は各C2DSpriteObjectにあるTargetProc()を毎フレーム呼び出してください。
例: pObj->TargetProc();
⑤スプライト個々に削除依頼
C2DSpriteTrackに削除依頼を出します(自前で消すのは絶対にやめてください)
例: pSpriteTrack->DeleteObject( pObj );
⑥C2DSpriteTrackを削除
使用終了したらC2DSpriteManagerに削除を依頼してください。
例: g_p2DSpriteManager->Delete( pSpriteTrack );
基本的にこのサイクルで使いまわします。
準備する事
- プロジェクト内にSeleneフォルダがありますので、ここに公式で配布されている.Libと.hを一通り入れて下さい。
- Binフォルダに.exeが作られるので、同じフォルダにSeleneで配布されている.dllを一通り入れてください。
- 十字キーで移動できます。
- Zで弾を撃ちます。
最終更新:2009年09月24日 01:40