Unreal Engine 4 http://uengine.ru/forum/ |
|
Помогите разобраться с loop'ами http://uengine.ru/forum/viewtopic.php?f=3&t=75198 |
Страница 1 из 1 |
Автор: | ProRock [ 22 май 2020, 19:11 ] |
Заголовок сообщения: | Помогите разобраться с loop'ами |
https://picua.org/image/ytMUbE Здравствуйте, форумчане. Как заставить красные сферы не повторять координаты? Общее количество зеленых платформ 36, количество сфер 18, но некоторые находятся в друг друге. Этого Я и пытаюсь избежать. https://picua.org/image/ytMGIy 1. Красная строчка - спаун зеленых квадратов. 2. Зеленая - спаун сфер 3. Установка координат сферам, координат рандомных квадратов. Тут то у меня и проблемы. Некоторые сферы находятся друг в друге, как видно Я пытаюсь сравнивать индексы квадратов взятых из массива. Пытался сравнивать локацию по такому же принципу, но ничего не выходит. В циклах Я не понимаю ничерта, думаю в этом проблема. Есть есть идеи, помогите пожалуйста. |
Автор: | icms [ 23 май 2020, 12:09 ] |
Заголовок сообщения: | |
Ну во первых не делайте это в сиквенсоре, вы одновременно заполняете массив и его же опрашиваете. Делайте последовательно по комплитед лупа. Во вторых так как вы используете рандом он естественно может повторять значения. Вариантов несколько, но думаю самый простой это когда расставляете сферы сохранять координаты в массив, а потом проверять есть ли уже такие. Можно через коллизии, в условии спавна указать DoNotSpawn (коллизии должны быть строены у сфер и кубов правильно, т.е. сферы колизятся с друг другом, но не с кубами)и тогда если место спавна занято - сфера не появится , проверяем это из спавна методам IsValid и если нет возвращаемся и пытаемся снова. |
Автор: | ProRock [ 23 май 2020, 21:02 ] |
Заголовок сообщения: | |
Снова здравствуйте! Подошел у проблеме к другой стороны. Вместе с другом решили, что спаун квадратов не нужен и расчитали сразу координаты сфер через массив с индексами так, что бы координаты не повторялись. С помощью цикла с предусловием (WhileLoop) генерируем случайное значение индекса массива, затем ячейка проверяется занята она или нет, если ячейка занята, то генерируется новый индекса, если ячейка свободна, то ячейка помечается как занятая, а индекс возвращается в основную программу. В основном коде имея индекс и зная размерность сетки вычисляем X и Y. Формула выглядит так; x=R/s, y=R-s*x, где R-индекс, s-количество ячеек. Ссылки на скриншоты: https://picua.org/images/2020/05/23/20a ... ad3b2b.jpg https://picua.org/images/2020/05/23/9a9 ... d50843.jpg |
Автор: | icms [ 23 май 2020, 22:47 ] |
Заголовок сообщения: | |
Народ ну вы точно нагородили, зачем булеву массиву инты присваиваете? Сохраняйте и проверяйте Location, индексы вам ни чего не дадут. |
Автор: | Prytaleks [ 25 май 2020, 01:30 ] |
Заголовок сообщения: | |
Думаю перепроверять весь массив локаций перед каждым спавном сферы - крайне не оптимизировано. Автор интуитивно понял суть оптимизации, но опыта реализовать нехватило. Интересная задача, вот на мой взгляд правильное решение, минимум итераций. Предупреждаю это логика подходит для поля 9х9, если поле больше, или вообще динамическое, тогда нужна другая логика, впрочем она тоже проста. Здесь массив создается ручками, сделал так, просто для того что бы автор понял суть, и не усложнять никак. https://picua.org/images/2020/05/25/e18 ... 343f1e.png https://picua.org/images/2020/05/25/e9a ... 1ac985.png Если нужна генерация поля любого размера, что бы итераций было минимум, и массив ручками не создавать, это уже за деньги)) p.s. Шучу, генерация поля любого размера, и спавн сфер. https://picua.org/images/2020/05/25/c7e ... dfe289.png https://picua.org/images/2020/05/25/347 ... 036c6b.png результат, квадрат полный массив - https://picua.org/images/2020/05/25/56a ... 93d447.png результат, прямоугольник и количество сфер = длина массива/2 - https://picua.org/images/2020/05/25/754 ... ed0355.png p.p.s. - https://picua.org/images/2020/05/25/8a2 ... 5a1739.png - если нужно что бы сферы появлялись в строго определенных местах, убери ноду с рандомом. |
Автор: | icms [ 25 май 2020, 17:37 ] |
Заголовок сообщения: | |
))) Ну раз пошёл такой челенж! то Цитата: крайне не оптимизировано это только в случае если поле будет большого размера, на 6*6 даже сложно засечь время. Самый простой и короткий и простой код через коллизии. Ну, а в предложенном варианте, нет лишних проходов с рандомом, но много лишних телодвижений со строковым массивом и его обработкой - (раз мы уж оптимизации заговорили)Вот так наверно будет оптимизированней)))) |
Автор: | Prytaleks [ 25 май 2020, 23:25 ] |
Заголовок сообщения: | |
Оптимизированней)) Все равно стринг это круто, я знал что тебе понравится)) p.s. оптимизировал оптимизированный вариант, больше уже некуда, согласен)) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |