【问题标题】:While loop crashing Unity, but is not infinite虽然循环使 Unity 崩溃,但不是无限的
【发布时间】:2017-08-08 21:49:54
【问题描述】:

我知道(从类似的帖子中)无限 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 的回答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 条件不再成立,所以退出循环(我认为?)。我还添加了一个额外的检查以在某些情况下跳出循环,但这并没有什么不同。

如果您能够指导如何解决此崩溃问题,或者对总体上更好的方法提出建议,我们将不胜感激!

【问题讨论】:

  • yet causes the game to crash. 能给我们看一下崩溃的截图吗?
  • 你的while 循环应该永远运行,只要count >= multiples。您应该在while 循环中减少count,使其变为< multiples。你现在没有这样做。
  • 您的“非无限循环”无限运行
  • 是的,休息 5 分钟,然后再看一遍,很明显这永远不会奏效!我想我有更好的方法来做这件事,明天会尝试并用结果更新这篇文章。谢谢大家!
  • 并且使用调试器,一旦程序进入无限循环,不到10秒就可以发现问题。您告诉调试器中断,然后检查变量或单步执行代码问题将非常明显。此外,它还可以帮助您更快地调试算法。

标签: c# unity3d while-loop infinite-loop


【解决方案1】:

while 循环中的任何内容都不会更改 countmultiples 的值,因此条件将始终评估为相同的值 => 无限循环

【讨论】:

  • 我想还值得注意的是,这种情况似乎比他预期的更罕见(因为它也会在评估为真 10 次后结束循环):if (count == currentMultiple + multiples)
  • 只有在count == 6 AFAICS 时才是正确的
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多