ゲームで使えそうなアニメ管理クラスを作ろう(2D)その2

あぅ,更新するの忘れてた.
えーと,前回はアニメーションを管理するクラスを作ったけど, 同じ種類のキャラでもオブジェクト毎にデータを持つので,データが重複して無駄が多かったっすね.
まぁ,格ゲーのキャラとかなら使えるんじゃけどねぇ・・・

今回は,コードデータ部を共通化してシューティングとかアクションとかでも使えるようにしよー.
というわけで,スクリプトから生成させたコード部と「アニメID→コードのアドレス」変換テーブルはstaticメンバ として持たせよぅ.
これでクラスを複数インスタンス化しても,1つのデータとして扱えるね.
ついでだから,この2つはまとめて構造体かなんかにする.
良い名前が思いつかん・・・
とりあえず,「アニメチャンク」で・・・むぅ.センスねぇ〜!! (TдT)
struct AnimChunk
{
  short * pcode ;     // コード本体
  WORD * ptable ;     // 変換テーブル
  WORD  code_size ;   // コードサイズ
};
まぁ,このアニメチャンクがキャラクタと1対1に対応する.
つまり,3種類のキャラがいる場合は,3つのチャンクが必要っす.
でも,同じ種類のキャラなら,同じチャンクを共通して使えるっす.

コード自体は,ロードする毎に(std::vectorみたいに)追加してもいいけど,アンロードの時とか何かとメンドイので 今回は,チャンクをあらかじめ64個予約・・・
うーん,1度に64種類もキャラを読まないだろうから,今回はまぁいいか・・・

んで,アニメーションの制御用のデータは,インスタンス毎に持たせる…と….

イメージ的にはこんな感じ.
アニメクラスのイメージ
…で,後は基本的に前回といっしょ.
ただ,「現在どのチャンクか」を管理する処理が増えた.

むふぅ.しかし,「敵は敵」「弾は弾」って感じで別々にデータ管理したいにゃー.(゚ω゚)
その方が便利そうだしなぁ・・・
チャンク64個っていう制限も軽くなりそうだしなぁ・・・
でも,static にしちまったからなぁ・・・
「敵は敵」「弾は弾」で名前だけ変えて別のクラスにすればOKなんだけど,いちいちメンドイしなぁ・・・
▲ ▲  う〜ん…
(゚ω゚)y= o ○
<U
  JL
しょうがないので,テンプレート使用!
なんか無意味くさいけど,簡単に実現できるから,まぁいいか(いいのか?)

これなら,例えば弾クラスでは,
class Shot
{
  AnimPlayer< Shot>  m_Anim ;
};
敵クラスでは,
class Enemy
{
  AnimPlayer< Enemy>  m_Anim ;
};
とすることで,別のクラスとして作られるから,データを別個に扱えるっす.

一応出来上がりがコレ.

AnimPlayer.h
AnimLoader.h(前回と一緒)
AnimLoader.cpp(前回と一緒)


うーん,今日はテンションが上がらん・・・
雨が降ってるから・・・



<< Back to Diary...