2017-03-10 10 views
1

AttackInfo.Targetの値に基づいた位置にポインタを置くコードがあります。 Stats[lifeStatus]配列リファレンスを使用して、文字が死んでいるかどうかを判断するコードもあります.0は死んで1は生きています。私のif文が私の関数の値を正しくチェックしないのはなぜですか?

私はTargetに死んだ文字の値をスキップして、攻撃する生きている文字のみを選択できるようにします。しかし、それは効果がないようです。

なぜ機能しないのですか?

else if (state == CHARACTER1TARGETCHOICE) { 
    attackButton.enabled = false; 
    abilitiesButton.enabled = false; 
    itemButton.enabled = false; 
    defendButton.enabled = false; 
    fleeButton.enabled = false; 
    if (pointer.GetComponent<SpriteRenderer>().enabled == false) { 
     pointer.GetComponent<SpriteRenderer>().enabled = true; 
    } 
    if (Input.GetKeyDown (KeyCode.UpArrow)) { 
     character1AttackInfo.Target -= 1; 
     bool checkTargetAlive = false; 
     while (checkTargetAlive) { 
      if (enemy1Stats [lifeStatus] == 0 && character1AttackInfo.Target == 1) { 
       character1AttackInfo.Target -= 1; 
      } else if (enemy2Stats [lifeStatus] == 0 && character1AttackInfo.Target == 2) { 
       character1AttackInfo.Target -= 1; 
      } else if (enemy3Stats [lifeStatus] == 0 && character1AttackInfo.Target == 3) { 
       character1AttackInfo.Target -= 1; 
      } else if (enemy4Stats [lifeStatus] == 0 && character1AttackInfo.Target == 4) { 
       character1AttackInfo.Target -= 1; 
      } else if (character1AttackInfo.Target == 0) { 
       character1AttackInfo.Target = 4; 
      } else { 
       checkTargetAlive = false; 
      } 
     } 
    } 

スクリプトのこの部分では、敵の番号が低いほど画面上に表示されます。したがって、上矢印を押すと、ターゲットの番号が下がり、カーソルが上に移動します。文字の上の異なる場所に移動するカーソルは、すでに完全に動作しています。ターゲットは何らかの理由でスキップしません。一度敵が死んで、enemy1Stats == 0が真でターゲットが1になっても、スキップしません。

+0

この 'enemy1Stats [lifeStatus] == 0'は 'true'と同じで、' character1AttackInfo.Target == 1'は 'true'と同じですか?あなたはチェックしましたか? – CodingYoshi

+0

それは異なります。 enemy1Stats [lifeStatus] == 0は、敵が死んでいる場合にのみ真になります。これはすべてより大きなスクリプトの一部です。また、character1AttackInfo.Target == 1は、カーソルがそこに移動された場合にのみ真となります。このスクリプト。この例では、enemy1Stats [lifeStatus] == 0が真であると仮定し、character1AttackInfo.Targetはしばらくの間真でなければならないが、変更する必要がある。しかしそれは変わらない。それは問題です。 –

+4

'bool checkTargetAlive = false;'の後に 'while(checkTargetAlive)'が続きます。どのようにそれを実行する必要がありますか? –

答えて

0

私は誤ってcheckTargetAliveをfalseに設定しています。これにより、whileループは決して実行されず、カーソルが正しく機能しなくなりました。ただ、事前にこれをtrueに設定すると、それが魅力のように働かせた:

コードのブロックが呼び出されない
else if (state == CHARACTER1TARGETCHOICE) { 
    attackButton.enabled = false; 
    abilitiesButton.enabled = false; 
    itemButton.enabled = false; 
    defendButton.enabled = false; 
    fleeButton.enabled = false; 
    if (pointer.GetComponent<SpriteRenderer>().enabled == false) { 
     pointer.GetComponent<SpriteRenderer>().enabled = true; 
    } 
    if (Input.GetKeyDown (KeyCode.UpArrow)) { 
     character1AttackInfo.Target -= 1; 
     bool checkTargetAlive = true; 
     while (checkTargetAlive) { 
      if (enemy1Stats [lifeStatus] == 0 && character1AttackInfo.Target == 1) { 
       character1AttackInfo.Target -= 1; 
      } else if (enemy2Stats [lifeStatus] == 0 && character1AttackInfo.Target == 2) { 
       character1AttackInfo.Target -= 1; 
      } else if (enemy3Stats [lifeStatus] == 0 && character1AttackInfo.Target == 3) { 
       character1AttackInfo.Target -= 1; 
      } else if (enemy4Stats [lifeStatus] == 0 && character1AttackInfo.Target == 4) { 
       character1AttackInfo.Target -= 1; 
      } else if (character1AttackInfo.Target == 0) { 
       character1AttackInfo.Target = 4; 
      } else { 
       checkTargetAlive = false; 
      } 
     } 
    } 
1

一般的なよう

while (checkTargetAlive) 

続い

bool checkTargetAlive = false; 

をコメント、私はあなたのゲームのロジックがどのように動作するはずか分かりませんが、質問のブロックには明確なコードの匂いがあります。ゲームロジックを実装する最もクリーンな方法ではありません。

+2

私は同意します。そこにチェックする多くの価値が、これにアプローチするより良い方法になるでしょう。 –

関連する問題