ゲームで使えそうなアニメ管理クラスを作ろう(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...