虽然循环崩溃Unity,但并非无限

时间:2017-08-08 21:49:54

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

我知道(来自类似的帖子)无限的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条件不再是真的,所以退出循环(我想?)。我还添加了一个额外的检查,以在某些情况下突破循环,但这并没有什么区别。

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

1 个答案:

答案 0 :(得分:5)

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