Physics2D.CircleCastAll

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Physics2D.CircleCastAll

Сообщение hustspbru 29 авг 2018, 15:26

Добрый день!
Новичок в программировании.
Есть такая функция
private void GenerateBallAtTime()
{
int posx = Random.Range(60, 1020);
int posy = Random.Range(100, 1680);
int radius = 100;
if (Physics2D.CircleCastAll(new Vector2(posx, posy), radius, Vector2.zero, 0.0f, mask).Length == 0)
{
GameObject tmpball = Instantiate(newball, new Vector3(posx, posy, 10), Quaternion.identity);
}
else
{
GenerateBallAtTime();
}
}
В общем так я пытаюсь найти свободное место на поле для шарика. Берем случайную координату смотрим есть ли в заданном радиусе шары если нет то спавним если есть то повторяем заново. Все работает до тех пор пока на поле есть свободное место. Когда места уже нет то пишет ошибку stackoverflow и приложение виснет =( как можно это побороть ? пытался через try catch ошибка ловится но все равно перед этим подвисает.

Спасибо!
hustspbru
UNец
 
Сообщения: 3
Зарегистрирован: 16 авг 2018, 14:43

Re: Physics2D.CircleCastAll

Сообщение IDoNotExist 29 авг 2018, 15:39

Поздравляю, у вас бесконечная рекурсия.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Physics2D.CircleCastAll

Сообщение Anonymyx 29 авг 2018, 16:04

Stackoverflow exception просто так через try-catch не обрабатывается. При переполнении стэк восстановлению не подлежит.
Все работает до тех пор пока на поле есть свободное место. Когда места уже нет то пишет ошибку stackoverflow и приложение виснет =(

А чего вы ожидали?
Обычно, когда имеют дело с рекурсией, для предотвращения переполнения стэка используют счетчик вызовов. Т.е. если мы, допустим, через 300 вызовов не нашли свободное место, будет считать что его нет.
Лучше переделать под корутинку и там искать свободное место, в цикле.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 29