Я знаю (из похожих сообщений), что бесконечные циклы while печально известны тем, что вызывают сбой Unity3d. Я пытаюсь внедрить цикл while в то, над чем я работаю, что, я уверен, не является «бесконечным», но вызывает сбой игры.
Идея логики состоит в том, чтобы проверить список целых чисел на наличие последовательных чисел и использовать это как основу для применения бонуса. Список содержит «эффективные выстрелы», и каждый раз, когда производится выстрел, добавляется новое значение — чем больше последовательных эффективных выстрелов, тем выше бонус.
Вот что у меня есть:
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 здесь. Хотя это, кажется, работает, я думаю, что это может быть проблемой. Как только выстрел пропущен, count
необходимо сбросить. Есть идеи или предложения?
Затем следует ввести цикл while, как только количество последовательных эффективных выстрелов достигнет первого кратного, то есть 3 выстрелов. Затем для каждой серии последовательных результативных выстрелов увеличивайте бонус, например:
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.
Можете ли вы показать нам скриншот сбоя? - person mjwills   schedule 09.08.2017while
будет работать вечно, покаcount >= multiples
. Вы должны уменьшитьcount
в циклеwhile
, чтобы он стал< multiples
. Вы не делаете это прямо сейчас. - person Programmer   schedule 09.08.2017