ゲームパッド入力で==1の場合が動かない
Posted: 2011年7月19日(火) 16:51
ゲーム制作とはあまり関係がないのですが、
ゲームパッドを使ってゲームが動くようにしたいと思い、
GetJoypadInputStateを使ってコントローラに対応するようにしたつもりなのですが、
入力で、if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_LEFT ) == 1 )
とした場合は動かなく、==2にしたりすると>=1の結果になってしまいます。>=1だとその通り動くのですが、
どこがおかしいのでしょうか…
void GameMain()という関数にint GetJoypadInputState( int InputType )の宣言を入れましたが、
グローバルにしても同じでした。
ゲームパッドを使ってゲームが動くようにしたいと思い、
GetJoypadInputStateを使ってコントローラに対応するようにしたつもりなのですが、
入力で、if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_LEFT ) == 1 )
とした場合は動かなく、==2にしたりすると>=1の結果になってしまいます。>=1だとその通り動くのですが、
どこがおかしいのでしょうか…
void GameMain()という関数にint GetJoypadInputState( int InputType )の宣言を入れましたが、
グローバルにしても同じでした。
#include "DxLib.h"
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}
#define SCREEN_WIDTH 560
#define SCREEN_HEIGHT 420
#define CHIP_SIZE 20
#define MAP_WIDTH (SCREEN_WIDTH/CHIP_SIZE)
#define MAP_HEIGHT (SCREEN_HEIGHT/CHIP_SIZE)
int MAP[21][28]=
{
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
{0,0,8,8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,0, 0,0,0,0,0,0,0,0},
};
int X=120, Y=0;
int time=0;
void GameMain(){
int GetJoypadInputState( int InputType ) ;
if(time<=60){
time++;
}else time=0;
if(time==60)
Y += 20;
//入力
if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_LEFT ) == 1 ){
X -= 20;
}
if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_RIGHT ) == 1 ){
X += 20;
}
if(( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_DOWN ) == 1 ){
Y += 20;
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
SetMainWindowText("テトリス");
ChangeWindowMode(TRUE);
SetGraphMode(560,420,32);
if( DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
int block[8] = {
LoadGraph( "image/block1.png" ),//ブロック1~7+壁
LoadGraph( "image/block2.png" ),
LoadGraph( "image/block3.png" ),
LoadGraph( "image/block4.png" ),
LoadGraph( "image/block5.png" ),
LoadGraph( "image/block6.png" ),
LoadGraph( "image/block7.png" ),
LoadGraph( "image/block0.png" )};
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
GameMain();
//とりあえずXとY座標にブロック1を表示してみる
DrawGraph( X, Y, block[1], TRUE );
//マップ描画
for(int y=0;y<MAP_HEIGHT;y++){
for(int x=0;x<MAP_WIDTH;x++){
if(MAP[y][x] != 0)
DrawGraph( x*20, y*20, block[MAP[y][x]-1], TRUE );
}
}
ScreenFlip();
}
DxLib_End();
return 0;
}