「みずほ銀の著作権投資、ゲーム開発にシフト」らしい>挨拶
---
キャラクタクラス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;
}