ゲーム開発14:キャラクタクラス作成

0307a462.jpg「みずほ銀の著作権投資、ゲーム開発にシフト」らしい>挨拶
---

キャラクタクラスCCharaを作るため試行錯誤してたのですが、あれやこれやと色んなモノを詰め込もうとして、訳わからん状態となってしまいました。

これじゃいつまで経っても完成しないという事で、複雑な処理は排除、外部ファイルとして持たせるデータもソースにベタ打ちさせて、とにかく動くもの優先で作ることにしました。

とりあえず以下の値だけ持たせました。

座標mx,my,mz
キャラクタ番号my_no
スプライト番号spr_no
キャラクタ管理クラスへのポインタCCharaManage*

ソースですが、前回のキャラクタ管理クラスCCharaManageからCCharaを継承した自キャラクラスCMyCharaを呼び出します。呼び出し時に即値でスプライトを生成して、spr_noに格納します。今はあまり意味無いけど、CCharaManageへのポインタもCommonInit()の中で格納しています。

Move()ではCInputクラスからキー入力を受け取り、座標mx,myに移動量を加算します。これで移動できます。

最後にDraw()からCommonDraw()を呼び出してスプライト表示させます。今は無駄に見えますが、キャラクタ毎に描画方法は変わりますので、こう書いてます。

一応これで任意の場所にキャラクタを表示し、キーボード等で移動させる事が出来ます。欲張らずに、最初からこうやって組んどけばよかったよ。

次回は当たり判定を行います。

//---------------------------------------------------------
// 初期化
CMyChara::CMyChara(int no, int x, int y, CCharaManage *manage)
{
 RECT workRect;

 my_no=no;
 CommonInit(x, y, 1, manage);

 // スプライト作成
 SetRect(&workRect, 0, 0, 48, 96);
 spr_no[0]=System->Graphics->CreateSprite("data\test.jpg", workRect);
}

//---------------------------------------------------------
// 移動
void CMyChara::Move()
{
 float work_x, work_y;
 KEYCODE key;

 // キーコード取得
 System->Input->PressKey(&key);

 work_x=(float)key.x*6;
 work_y=(float)key.y*6;

 mx+=work_x;
 my+=work_y;
}

//---------------------------------------------------------
// 描画
void CMyChara::Draw()
{
 CommonDraw();
}

//---------------------------------------------------------
// 共通描画
void CChara::CommonDraw()
{
 System->Graphics->DrawSprite(spr_no[0], mx, my, mz, D3DXCOLOR(1,1,1,1), 0, 1, 1);
}

//---------------------------------------------------------
// 共通初期化
void CChara::CommonInit(int x, int y, int type, CCharaManage *manage)
{
 CharaManage=manage;

 mx=(float)x;
 my=(float)y;
 mz=1.0f;
}

コメントを残す

メールアドレスが公開されることはありません。