Полезное

Мы Вконтакте

Discord канал

#
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 72
https://picua.org/image/ytMUbE


Здравствуйте, форумчане. Как заставить красные сферы не повторять координаты?

Общее количество зеленых платформ 36, количество сфер 18, но некоторые находятся в друг друге. Этого Я и пытаюсь избежать.


https://picua.org/image/ytMGIy


1. Красная строчка - спаун зеленых квадратов.
2. Зеленая - спаун сфер
3. Установка координат сферам, координат рандомных квадратов. Тут то у меня и проблемы. Некоторые сферы находятся друг в друге, как видно Я пытаюсь сравнивать индексы квадратов взятых из массива. Пытался сравнивать локацию по такому же принципу, но ничего не выходит. В циклах Я не понимаю ничерта, думаю в этом проблема. Есть есть идеи, помогите пожалуйста.
Аватара пользователя
Пользователь
Сообщения: 436
Ну во первых не делайте это в сиквенсоре, вы одновременно заполняете массив и его же опрашиваете. Делайте последовательно по комплитед лупа.
Во вторых так как вы используете рандом он естественно может повторять значения. Вариантов несколько, но думаю самый простой это когда расставляете сферы сохранять координаты в массив, а потом проверять есть ли уже такие. Можно через коллизии, в условии спавна указать DoNotSpawn (коллизии должны быть строены у сфер и кубов правильно, т.е. сферы колизятся с друг другом, но не с кубами)и тогда если место спавна занято - сфера не появится , проверяем это из спавна методам IsValid и если нет возвращаемся и пытаемся снова.
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 72
Изображение
Изображение

Снова здравствуйте! Подошел у проблеме к другой стороны. Вместе с другом решили, что спаун квадратов не нужен и расчитали сразу координаты сфер через массив с индексами так, что бы координаты не повторялись.
С помощью цикла с предусловием (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
Аватара пользователя
Пользователь
Сообщения: 436
Народ ну вы точно нагородили, зачем булеву массиву инты присваиваете? Сохраняйте и проверяйте Location, индексы вам ни чего не дадут.
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 4012
Думаю перепроверять весь массив локаций перед каждым спавном сферы - крайне не оптимизировано.
Автор интуитивно понял суть оптимизации, но опыта реализовать нехватило.

Интересная задача, вот на мой взгляд правильное решение, минимум итераций.
Предупреждаю это логика подходит для поля 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 - если нужно что бы сферы появлялись в строго определенных местах, убери ноду с рандомом.
Аватара пользователя
Пользователь
Сообщения: 436
))) Ну раз пошёл такой челенж! то
Цитата:
крайне не оптимизировано
это только в случае если поле будет большого размера, на 6*6 даже сложно засечь время. Самый простой и короткий и простой код через коллизии. Ну, а в предложенном варианте, нет лишних проходов с рандомом, но много лишних телодвижений со строковым массивом и его обработкой - (раз мы уж оптимизации заговорили)

Вот так наверно будет оптимизированней))))

Изображение
_________________
Project SKIT
Аватара пользователя
Пользователь
Сообщения: 4012
Оптимизированней))
Все равно стринг это круто, я знал что тебе понравится))

p.s. оптимизировал оптимизированный вариант, больше уже некуда, согласен))


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница