2017-08-08 9 views
1

私は(同様の記事から)Unity3dをクラッシュさせる原因として有名なwhileループが有名だと知っている。私は、私がかなり無限ではないと確信していますが、まだゲームがクラッシュする原因となっているものの中に、whileループをインパクトさせています。whileループがクラッシュするが、無限ではない

論理のアイデアは、連続する数字の整数リストをチェックして、それをボーナスを適用するための基礎として使用することです。このリストには「効果的なショット」が含まれており、ショットが実行されるたびに新しいintが追加されます。連続した効果ショットが多いほど、ボーナスは高くなります。

は、ここで私が持っているものです。

 int count = 0; 
     int firstItem = 0; 
     int multiples = 3; 
     int currentMultiple = 0; 
     int bonusX = 0; 

     foreach (int i in effectiveShots) 
     { 
      if (count == 0) 
      { 
       firstItem = i; 
       count = 1; 
      } 

      else if (i == firstItem + count) 
      { 
       count++; 
      } 

     } 

     while (count >= multiples) 
     { 
      currentMultiple = multiples; 

      if (count == currentMultiple + multiples) 
      { 
       bonusX += 1; 
      } 

      if (bonusX > 10 || gameOver) 
       break; 

      UnityEngine.Debug.Log(bonusX); 
     } 

effectiveShotsリストでconsectiveのエントリをチェックするためのロジックは@ジョンスキートの答えhereから取られました。これはうまくいくように見えますが、私はこれが問題かもしれないと思います。ショットが見逃されるとすぐに、countをリセットする必要があります。 アイデアや提案

連続した有効ショットの数が最初の倍数、つまり3ショットに達したら、whileループを入力する必要があります。すると、その後consequtive効果的なショットのすべてのセットのために、例えば、ボーナスをインクリメント:

3 shots: bonusX = 1 
6 shots: bonusX = 2 
9 shots: bonusX = 3 
12 shots: bonusX = 4 

and repeat this until `count` is no longer >= 3, i.e. the player missed a shot. 

問題があるとすぐに、私は3つのconsequtiveショットを打つと、このループ、ゲームがクラッシュに入るように、その。私はこれを無限ループと呼んでいないと思います。ショットがないので、count == 0を設定するとwhile条件はもはや真ではないので、ループから脱落してしまいます。私はまた、特定の状況下でループから脱出するための追加のチェックを追加しましたが、これは違いがありません。

このクラッシュを修正する方法を教えてもらったり、一般的にはより良いアプローチを提案していただければ幸いです。あなたのwhileループ内

+0

'まだゲームがcrash.'になります、あなたは私たちを見ることができますクラッシュのスクリーンショット? – mjwills

+5

あなたの 'while'ループは' count> = multiple 'の間、** forever **を実行することになっています。 'while'ループの' count'を減らし、 ' Programmer

+2

あなたの "無限ループ"は無限に実行されています** – maccettura

答えて

4

何もcountmultiplesのいずれかの値を変更しないので、条件が常にが同じ値に評価=>無限ループが

+0

私は、この条件が期待していたよりも稀であると考えていることにも注意してください(実際に10回評価した後にループを終了させるため)。 –

+0

'count == 6'の場合はtrue AFAICS –

関連する問題