<起きている問題>
- キーLを押しても反応しない、
- コントローラの四角ボタンで銃を撃つのですが、たまに何度押しても反応しないことがあります。
<試したこと>
解決方法として、コントローラが接続されている時はコントローラのみが働くように書いて、キーで行う時はキーのみで動くように書けばいい様に思えますが、int GetJoypadNum( void )は接続されているコントローラ数を得るだけなので、接続を切っても(説測しているコントローラが一つなので)値が1のままでした。
コントローラを切った場合に0になるならば、それを利用してどちらか一方のみを使えるようにしようと思ったのですが。
何か解決法は他にないでしょうか。
解決方法が見いだせなかったので、キーとコントローラの二つが対応できるように以下のように書きました。
これにより起きている問題が上に書いた問題です。
//キーLを押したままGキーを押すと武器が切り替わる if (Key[KEY_INPUT_L] == 1) { Lcount = 1; } if (Key[KEY_INPUT_L] == !1) { Lcount = 0; }//キーLを離すとLcountは0になる。 if (Lcount > 0) { if (Key[KEY_INPUT_G] == 1) { Gtime = 0; ++Gfunction_status; ++Gkey; } } //L1ボタンを押したまま四角のボタンを押すと武器が切り替わる if ( (PrevPadState & PAD_INPUT_5) == 0 //前回は押されていなくて && //且つ (CurrPadState & PAD_INPUT_5) != 0 //今回は押されている ) {//「四角」は今押された //「四角」が押されたときの処理 Lcount = 1; } else if(Key[KEY_INPUT_L] == 1) { Lcount = 1; } if ( (PrevPadState & PAD_INPUT_5) == 0 //前回は押されていない && //且つ (CurrPadState & PAD_INPUT_5) == 0 //今回も押されていない ) {//「四角」は今押された //「四角」が押されたときの処理 Lcount = 0; Glock = 0; Lframe = 0; } //if (Pad & PAD_INPUT_5) { Lcount = 1; } if (Lcount > 0) { ++Lframe; Glock = 1; } //if (Key[KEY_INPUT_L] == !1) { Lcount = 0; }//キーLを離すとLcountは0になる。//これのせいでLcountが上がらなかった if (Lcount > 0) { if ( (PrevPadState & PAD_INPUT_1) == 0 //前回は押されていない && //且つ (CurrPadState & PAD_INPUT_1) != 0 //今回は押されている ) {//「右」は今押された //「右」が押されたときの処理 Gtime = 0; ++Gfunction_status; ++Gkey; //Glock = 1; } } if (Gkey > 2) { Gkey = 1; } if (Gfunction_status > 1) { Gfunction_status = 0; }
コントローラの四角ボタンと、キーGで銃で攻撃する部分です。
※(キーとコントローラのボタンを統一したように書いたため、
コントローラの四角ボタンで銃を撃つのですが、たまに何度押しても反応しないことがあるのかもしれません。)
if ( (PrevPadState & PAD_INPUT_1 && playerX > 0 && Gcount >= 1 && Gtime == 0 && Gkey == 1&& (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_5) == 0) == 0 //前回は押されていなくて && //且つ (CurrPadState & PAD_INPUT_1 && playerX > 0 && Gcount >= 1 && Gtime == 0 && Gkey == 1&& (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_5) == 0) != 0 //今回は押されている ) {//「右」は今押された //「右」が押されたときの処理 Gtime = 1; //銃を撃ってからの経過時間を1にする Gcount = Gcount - 1; //残弾数を-1する playerImage = playerGHandle[7]; //真正面の状態にする if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX || playerY == enemyY && playerX + 4 == enemyX || playerY == enemyY && playerX + 5 == enemyX) {//これで前に敵がいるときのみに攻撃が出来る。 enemyHP = enemyHP - 10; enemyImage = enemyGHandle[5]; } } if (Key[KEY_INPUT_G] == 1 && Gcount >= 1 && Gtime == 0 && Gkey == 1 && Key[KEY_INPUT_L] == !1) { //キーGを押していて且つ残り弾数( Gcount )が1発以上あって銃を撃ってからの経過時間( Gtime )が0の場合のみ銃を撃てる Gtime = 1; //銃を撃ってからの経過時間を1にする Gcount = Gcount - 1; //残弾数を-1する playerImage = playerGHandle[7]; //真正面の状態にする if (playerY == enemyY && playerX + 1 == enemyX || playerY == enemyY && playerX + 2 == enemyX || playerY == enemyY && playerX + 3 == enemyX || playerY == enemyY && playerX + 4 == enemyX || playerY == enemyY && playerX + 5 == enemyX) {//これで前に敵がいるときのみに攻撃が出来る。 enemyHP = enemyHP - 10; enemyImage = enemyGHandle[5]; } }
全体のプログラム
全体のプログラム
画像はこちらのサイトからです
画像
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/06 17:56