私は(同様の記事から)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
ループ内
'まだゲームがcrash.'になります、あなたは私たちを見ることができますクラッシュのスクリーンショット? – mjwills
あなたの 'while'ループは' count> = multiple 'の間、** forever **を実行することになっています。 'while'ループの' count'を減らし、 '
Programmer
あなたの "無限ループ"は無限に実行されています** – maccettura