マルチポスト
数時間前から自己解決しようと頑張っているのですが、全く歯が立たず皆様の力をお借りしたいです。
少し難解であるためマルチポストで知恵を貸していただこうと思い今回のように至りました。
環境はWindows10、C言語、DXライブラリです。
使った画像が載っているサイトです。画像
行いたいこと
キーRを押してキーAでアタックします、そして、画像が右向きになり再びAを押すと連続攻撃ができるように作りたいのですが、一つ目のifの条件と二つ目のifの条件が重なってしまい連続攻撃が再現できずにいます。
問題の部分はこれです。
//playerY != enemyYよりY座標が異なる場合を表す、Y座標が異なる場合はlockの値は0になる。要はロックが解除されてしまう。 if (lock) { if (Key[KEY_INPUT_A] == 1 && count <= 50) { //殴る//(lock){}の中に書くとロックする度にcountが0になるので意味がない //count++; ここにcount書くとifの条件よりcountが0の時の下のlockやplayerX = enemyX - 1など条件になるため、++でcountが1になったらロックできても攻撃できないんだ //ここのcountの情報がそのまま下の描画関数に渡されるだけ。 //if (count >= 0 && ++count > 40) {//countが0から15になるまでを一フレームで表しただけでは?ようはcountを0~1にするのに15フレームかかっただけでは?いや、単純にここにフレームは働いていないなので++count > 40と書いて39回行うはずがフレームが働かないので1しか上がっていないので一回しか攻撃が出来ないのだ lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。 lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。 preplayerX = playerX; // 元の位置を保持 playerX = enemyX - 1; // 俺は敵の眼前へ after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。 enemyImage = enemyGHandle[5];//攻撃を食らうと右向きになるようにする count = count - 10;//キーAを押すたびに10だけ引く count3 = count; count2 = count2 - 1; } } if (Key[KEY_INPUT_A] == 1 && enemyImage == enemyGHandle[5])//敵が右向きの時に続けてAを押すと連続攻撃ができる//相手がenemyImage == enemyGHandle[5]状態の時に他の攻撃もできるように他のキーも&&すればいい { count = count3 - 10; playerX = enemyX - 1; // 俺は敵の眼前へ after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。 }
以下が全体のコードです。
文字数制限でこちらのサイトに移しました。お手数をお掛けします。
全体のプログラムです
<編集>
以下のように行いました。一応理にかなっていると思うのですがうまくいきませんでした。
一つ目のifもなぜか重複してしまい50から20ずつ引かれてしまいます。なぜでしょうか。
int count2 = 1; //playerY != enemyYよりY座標が異なる場合を表す、Y座標が異なる場合はlockの値は0になる。要はロックが解除されてしまう。 if (lock) { if (Key[KEY_INPUT_A] == 1 && count <= 50&& count2 == 1) { //殴る//(lock){}の中に書くとロックする度にcountが0になるので意味がない //count++; ここにcount書くとifの条件よりcountが0の時の下のlockやplayerX = enemyX - 1など条件になるため、++でcountが1になったらロックできても攻撃できないんだ //ここのcountの情報がそのまま下の描画関数に渡されるだけ。 //if (count >= 0 && ++count > 40) {//countが0から15になるまでを一フレームで表しただけでは?ようはcountを0~1にするのに15フレームかかっただけでは?いや、単純にここにフレームは働いていないなので++count > 40と書いて39回行うはずがフレームが働かないので1しか上がっていないので一回しか攻撃が出来ないのだ lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。 lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。 preplayerX = playerX; // 元の位置を保持 playerX = enemyX - 1; // 俺は敵の眼前へ after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。 enemyImage = enemyGHandle[5];//攻撃を食らうと右向きになるようにする count = count - 10;//キーAを押すたびに10だけ引く count3 = count; count2 = count2 - 1;//ここで0になる、Aを繰り返してcount2が—1になったとしてもcount2<=0より二つ目のifの条件に合うので二つ目のifが実行できるはず、、、。 } } if (Key[KEY_INPUT_A] == 1 && enemyImage == enemyGHandle[5]&&count2<=0)//敵が右向きの時に続けてAを押すと連続攻撃ができる//相手がenemyImage == enemyGHandle[5]状態の時に他の攻撃もできるように他のキーも&&すればいい { count = count3 - 10; playerX = enemyX - 1; // 俺は敵の眼前へ after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。 }
あなたの回答
tips
プレビュー