【发布时间】: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