我知道(来自类似的帖子)无限的while循环因导致Unity3d崩溃而臭名昭着。我想在我正在努力的事情中徘徊一段时间,我相当确定它不是无限的,但却导致游戏崩溃。
逻辑的想法是检查连续数字的整数列表,并将其作为应用奖金的基础。该列表包含'有效镜头'并且每次射击时都会添加一个新的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
列表中的连续条目的逻辑来自@Jon Skeet的答案here。虽然这似乎有效,但我认为这可能是个问题。一旦镜头丢失,count
需要重置。 任何想法或建议?
一旦连续有效镜头的数量达到第一个倍数,即3个镜头,就应该输入while循环。然后,对于之后的每组连续有效击球,增加奖励,例如:
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张并进入此循环,游戏就会崩溃。我不认为我会称这是一个无限循环,因为错过了一个镜头 - 设置count == 0
- 意味着while条件不再是真的,所以退出循环(我想?)。我还添加了一个额外的检查,以在某些情况下突破循环,但这并没有什么区别。
如果您能够指导如何解决此崩溃问题,或者对更好的方法提出建议,我们将不胜感激!
答案 0 :(得分:5)
while
循环中的任何内容都不会更改count
或multiples
的值,因此条件将始终评估为相同的值=>无限循环