ゲームパットのプログラム
ゲームパットのプログラム
ゲームパットのプログラムを作ったのですが、DAWNのPADしか反応しません。ゲームパットが故障している可能性も考えたのですが、コントロールパネルでテストしたところ正常に動作しました。プログラムでいけないところがあったら教えてください。
Re:ゲームパットのプログラム
一応、4方向に歩くプログラムを改造して作成しています。
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) == 1){ //上ボタンが押されたら
ch.muki=0;} //上向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_LEFT ) == 1){ //左ボタンが押されたら
ch.muki=1;} //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_DOWN ) == 1){ //下ボタンが押されたら
ch.muki=2;} //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_RIGHT) == 1){ //右ボタンが押されたら
ch.muki=3;} //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
}
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力可能
ch.walking_flag=1; //歩くフラグを立てる。
if ( Key[ KEY_INPUT_UP ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) == 1){ //上ボタンが押されたら
ch.muki=0;} //上向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_LEFT ) == 1){ //左ボタンが押されたら
ch.muki=1;} //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_DOWN ) == 1){ //下ボタンが押されたら
ch.muki=2;} //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_RIGHT) == 1){ //右ボタンが押されたら
ch.muki=3;} //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる
}
Re:ゲームパットのプログラム
PAD_INPUT_UP 8
PAD_INPUT_RIGHT 4
PAD_INPUT_LEFT 2
PAD_INPUT_DOWN 1
なので == 1で判定すると PAD_INPUT_DOWN 以外は判定できません
GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_*
の判定は0(押されていない)か0以外(押されている)かで判定するようにしましょう
PAD_INPUT_RIGHT 4
PAD_INPUT_LEFT 2
PAD_INPUT_DOWN 1
なので == 1で判定すると PAD_INPUT_DOWN 以外は判定できません
GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_*
の判定は0(押されていない)か0以外(押されている)かで判定するようにしましょう
Re:ゲームパットのプログラム
全て==1でチェックしていますが、AND論理演算の結果は1とは限りません。
(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) == 1
たまたま、DOWNだけ一致したんだと思います。
全てを
(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) != 0
と同様にしてみてください。
(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) == 1
たまたま、DOWNだけ一致したんだと思います。
全てを
(GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) != 0
と同様にしてみてください。