新・ゲームプログラミングの館の2.9の全てのキーの監視をする関数を
SDLで動かしたいと思っています。そこでDXライブラリのGetHitKeyStateAll関数にほぼ同等の動作をすると思われる
SDL_GetKeyState関数を使用することにしました。ほぼ形は同じのままで関数だけ変えています。コンパイル、ビルドは通りますが、キー入力に反応してくれないようです。どこに問題があるのでしょうか?
コード
#include <stdio.h>
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
int tmpKey[256]; // 現在のキーの入力状態を格納する
SDL_GetKeyState(tmpKey);
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
int main()
{
SDL_Surface *mainScr;
SDL_Surface *img = IMG_Load("image/Reimu.png");
SDL_Rect img_rect,scr_img_rect;
img_rect.x = 0;
img_rect.y = 0;
img_rect.w = 320;
img_rect.h = 320;
scr_img_rect.x = 0;
scr_img_rect.y = 0;
SDL_Init(SDL_INIT_EVERYTHING); //SDL初期化
mainScr = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); //ウィンドウ作成
while(1)
{
gpUpdateKey();//呼び出す
if(Key[SDLK_UP] >= 1) //上キーが押されていれば(=該当の配列が1以上であれば)
{
scr_img_rect.y--; //上に移動
}
if(Key[SDLK_DOWN] >= 1) //下キーが押されていれば(=該当の配列が1以上であれば)
{
scr_img_rect.y++; //下に移動
}
SDL_BlitSurface(img, &img_rect, mainScr, &scr_img_rect); //画像描画をする
SDL_Delay(33); //だいたい30FPSぐらいで待つ
SDL_Flip(mainScr);//画像を表に出す
}
SDL_FreeSurface(mainScr);//開放
return 0;
}
2.if文なしでの画像の移動を確認しています。
よろしくおねがいします。