C# 虽然循环崩溃统一,但不是无限的

C# 虽然循环崩溃统一,但不是无限的,c#,unity3d,while-loop,infinite-loop,C#,Unity3d,While Loop,Infinite Loop,我从类似的帖子中了解到,无限while循环因导致Unity3d崩溃而臭名昭著。我试图在我正在做的事情中实现一个while循环,我很确定它不是“无限的”,但会导致游戏崩溃 该逻辑的思想是检查连续数字的整数列表,并以此作为应用奖金的基础。该列表包含“有效射击”,并在每次射击时添加一个新的int值-连续有效射击越多,奖金越高 以下是我所拥有的: int count = 0; int firstItem = 0; int multiples = 3;

我从类似的帖子中了解到,无限while循环因导致Unity3d崩溃而臭名昭著。我试图在我正在做的事情中实现一个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列表中连续条目的逻辑取自@Jon Skeet的答案。虽然这似乎有效,但我认为这可能是问题所在。一旦错过一次射击,需要重新设置计数。有什么想法或建议吗

一旦连续有效放炮的计数达到第一个倍数,即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个连续球并进入这个循环时,游戏就崩溃了。我不认为这是一个无限循环,因为缺少一个放炮设置计数==0-将意味着while条件不再为真,所以我认为退出循环?。我还添加了一个额外的检查,以在某些情况下打破循环,但这并没有什么区别


如果您能够就如何修复碰撞提供指导,或者就更好的方法提出建议,我们将不胜感激

while循环中的任何内容都不会更改count或multiples的值,因此该条件将始终计算为相同的值=>无限循环

while循环中的任何内容都不会更改count或multiples的值,因此该条件将始终计算为相同的值=>无限循环

,但会导致游戏崩溃。你能给我们看一个崩溃的屏幕截图吗?只要计数>=倍数,你的while循环就应该永远运行。假设在while循环中减少count,使其变为<倍数。你现在没有这样做。你的非无限循环正在无限运行是的,休息5分钟,再看看这个,很明显这永远不会起作用!我想我有一个更好的方法来做这件事,明天我会尝试并用结果更新这篇文章。谢谢大家!使用调试器,一旦程序进入无限循环,就可以在不到10秒内找到问题。您告诉调试器中断,然后检查变量或逐步执行代码,问题将非常明显。此外,它还可以帮助更快地调试算法,但会导致游戏崩溃。你能给我们看一个崩溃的屏幕截图吗?只要计数>=倍数,你的while循环就应该永远运行。假设在while循环中减少count,使其变为<倍数。你现在没有这样做。你的非无限循环正在无限运行是的,休息5分钟,再看看这个,很明显这永远不会起作用!我想我有一个更好的方法来做这件事,明天我会尝试并用结果更新这篇文章。谢谢大家!使用调试器,一旦程序进入无限循环,就可以在不到10秒内找到问题。您告诉调试器中断,然后检查变量或逐步执行代码,问题将非常明显。而且,这有助于更快地调试您的算法。我想还值得注意的是,这种情况似乎比他预期的更为罕见,因为在计算为true 10次后,它也会结束循环:if count==currentMultiple+multiples,这只有在count==6 afaics时才是真的。我想还值得注意的是,这种情况似乎是比他预期的更为罕见,因为它在计算为true 10次后也会结束循环:if count==currentMultiple+multiples,这仅在count==6 AFAICS时为true