アットウィキロゴ

機能別実装 > 大量の2Dスプライトを管理するクラスを管理する

大量の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
ツールボックス

下から選んでください:

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