移動させよう

Last-modified: 2007-12-08 (土) 03:13:26

今回はキーボードからの入力でキャラクターを動かしてみましょう。


キーボードからの入力でキャラクターを移動させる

ソース

void game_main(void)
{
   int nSp背景 = SP_GET_UNUSE_NUM();
   SP_SET_CG(nSp背景, 1);
   int nSpキャラ = SP_GET_UNUSE_NUM();
   SP_SET_CG(nSpキャラ, 2);
   int nX = 64;
   int nY = 272;
   for (;;) {
       if (KEY_IS_DOWN(VK_LEFT)) nX--;
       if (KEY_IS_DOWN(VK_RIGHT)) nX++;
       if (KEY_IS_DOWN(VK_UP)) nY--;
       if (KEY_IS_DOWN(VK_DOWN)) nY++;
       SP_SET_POS(nSpキャラ, nX, nY);
       UPDATE();
       W(5);
   }
}

解説

9~10行目

int nX = 64;
int nY = 272;

スプライトの初期位置を覚えておく変数を宣言します。

13~16行目

if (KEY_IS_DOWN(VK_LEFT)) nX--;
if (KEY_IS_DOWN(VK_RIGHT)) nX++;
if (KEY_IS_DOWN(VK_UP)) nY--;
if (KEY_IS_DOWN(VK_DOWN)) nY++;

この「KEY_IS_DOWN関数」は、第1引数で指定されたキーが押されているかを調べる関数です。VK_LEFTは左キー、VK_RIGHTは右キー、 VK_UPは上キー、VK_DOWNは下キーを意味しています。

その結果をif文でみて、押されているようであれば、その右に書かれているコードを処理しています。 if文の仕様を説明しますと、 if文は()の中が0以外ならば、その後に続く{}内のコードを実行します。{}内のコードが1行であれば、 {}は省略できます。「nX--;」は、変数nXの内容を1つ減らし、「nX++;」は、変数nXの内容を1つ増やすという意味です。

18行目

SP_SET_POS(nSpキャラ, nX, nY);

スプライトの位置を変更しています。

19行目

UPDATE();

画面を更新しています。

21行目

W(5);

W関数」は、指定時間だけ処理を止めています。この場合、 5ミリセカンド(1ミリセカンドは1000分の1秒)だけ一時停止させています。これがないと、速いパソコンではあっというまにキャラが画面外に移動してしまうので、それを防ぐための処理です。

実行画面

それでは、キーボードの上下左右のキーを押してみましょう。

tt03_001.png