これらのキー入力でスプライトを動かしてみましょう。
Test3.c
#include <stdio.h>
#include <gb.h>
// タイルデータ
#include "testtile.c"
void main()
{
UBYTE i;//ループ用
UBYTE x,y;//x,y座標用
UBYTE input;//キー入力用
DISPLAY_OFF;// 画面全体を非表示
HIDE_SPRITES;// スプライトを非表示
SPRITES_8x8;// スプライトモードを8*8に設定
set_sprite_data(0, 4, TestTileLabel); // タイルデータをスプライトとして設定(0番から4つ)
set_sprite_tile( 0, 0);// スプライト0番にタイル0番を設定
SHOW_SPRITES;// スプライトを表示
DISPLAY_ON;// 画面全体を表示
// 初期座標を設定
x = 80;
y = 72;
while (1) {// 無限ループ
input = joypad();// キー入力
if (input & J_RIGHT) x++;// 右入力
if (input & J_LEFT) x--;// 左入力
if (input & J_DOWN) y++;// 下入力
if (input & J_UP) y--;// 上入力
move_sprite( 0, x, y);// スプライト0番の座標を設定
delay(10);//10ミリ秒待つ
}
}
これを、前回同様にコンパイルしてエミュレータで実行します。
これだけでは分からないと思いますが、十字キーを押すと、その方向へ0が動きます。
input = joypad();// キー入力
joypad()関数でキー入力を取得します。
すると、キーに対応したビットがONになりますので
if文でAND(論理積)をかけて判定します。
ゲームボーイはまだ終わってない!から抜粋させていただきますと、以下の通りとなります。
・ボタン種類と定数の対応関係
ボタン種類 | ボタン定数 | 値 |
---|---|---|
START | J_START | 0x80U |
SELECT | J_SELECT | 0x40U |
B | J_B | 0x20U |
A | J_A | 0x10U |
下 | J_DOWN | 0x08U |
上 | J_UP | 0x04U |
左 | J_LEFT | 0x02U |
右 | J_RIGHT | 0x01U |
そして、main関数の中ではwhile(1)で無限ループさせています。
ループの最後にあるdelay(10)でウェイトをかけています。
この値が大きくなるほど、処理の間隔が開きますので、移動スピードが遅くなります。
ちなみに、delay()の引数の単位はミリ秒です。
0 件のコメント:
コメントを投稿