Поиск координат, вакантных для респауна

Программирование на Юнити.

Re: Поиск координат, вакантных для респауна

Сообщение lawson 10 окт 2018, 14:32

ооо, все понятно, кароче используйте рандом и не парьтесь!

во втором варианте как раз таки и реализовано использование "потенциальных полей"

не обманывайте себя, это не то
lawson
UNIверсал
 
Сообщения: 409
Зарегистрирован: 14 сен 2012, 21:20

Re: Поиск координат, вакантных для респауна

Сообщение maksimov 10 окт 2018, 15:08

lawson писал(а):хотите подобрать самый эффективный алгоритм, там протестируйте те что вам посоветовали, и решите сами что лучше.

Ваш совет выглядел бы весьма дельным и логичным (а не абсурдным и нелепым), если бы ранее в этой ветке кем-либо был бы предложен какой-либо алгоритм.

Однако, реальность такова, что вы смогли предложить (непонятно только зачем), лишь глупый флуд на тему "гы-гы, зачем оптимизировать код", а 1max1 - чудесные советы в стиле "бегать по массиву будет быстрее, если рядышком создать ещё один массив, и сортировать его непонятно зачем", и поток истерики по поводу "недооценённости" чудесности подобных советов.

lawson писал(а):А то с каждым сообщение открываются новые подробности.

Это не так. Вы напрасно пытаетесь придумывать всякие небылицы, дабы оправдать ими свою неправоту.

Дословная цитата из изначального поста: "персонажи (массив объектов) каждый из которых в каждый момент времени находится в той или иной клеточке поля (имеет координаты)."
После чего вы пишете: "каждый персонаж должен иметь ссылку на ту клетку в который он находится" и "Вы что вычисляете каждую клетку под персонажем по расстоянию?"
Красота — не прихоть полубога, а хищный глазомер простого столяра.
Аватара пользователя
maksimov
UNIт
 
Сообщения: 148
Зарегистрирован: 19 фев 2013, 11:48
  • Сайт

Re: Поиск координат, вакантных для респауна

Сообщение 1max1 10 окт 2018, 15:30

У нас завелся тролль-всезнайка, где там мышьяк? :ymsick:
Что ты ждешь с такой самооценкой на этом форуме? То что тебе дадут сразу супер-мега-оптимизированный код для твоего случая? А даже если дадут, ты начнешь кричать: "Не-е-е, нужно еще круче, это фигня, это я уже делал, вот смотрите -> (полная Ж) !".
Вообщем доказывать что либо этому человеку бессмысленно, он хочет видеть только то, что хочет, а не взгляды других людей и мнение со стороны, да поможет ему господь (надеюсь хотя бы он ему поможет).

п.с. И еще пару слов про твой ̶г̶о̶в̶н̶о̶ МЕГА код (это касательно твоего первого сообщения в мой адрес):
Возьмем твой первый метод:
Синтаксис:
Используется csharp
public Position GetPositionOne()
        {
            //Position[] characters
           
            Position pos = null;
            while (pos == null)
            {
                pos = new Position(UnityEngine.Random.Range(0, 64), UnityEngine.Random.Range(0, 64));

                if (tiles[x, z] == TileType.Water)
                {
                    pos = null;
                }
                else
                {
                    foreach (var c in characters)
                    {
                        if (Position.Distance(c, pos) < 10)
                        {
                            pos = null;
                            break;
                        }
                    }
                }
            }

            return pos;
        }
 

Видишь ли, переменная pos в этой строке:
pos = new Position(UnityEngine.Random.Range(0, 64), UnityEngine.Random.Range(0, 64));
С каждой новой итерацией может быть равна предыдущей (или той, которая уже была раньше), потому что UnityEngine.Random.Range(0, 64) может выдать одно и тоже значение несколько раз подряд, но ты ведь и так об этом знаешь, да? Умник. Так вот, то что я тебе предлагал, это сделать уже готовый сгенерированный заранее список из всех позиций клеток, и когда тебе нужно будет выбирать рандомную клетку, перемешивать этот список и пробегать по нему так же как ты делаешь это в while.
Надеюсь твоя головушка сможет осознать вышесказанное, ибо если нет, то это уже диагноз. =p~
Последний раз редактировалось 1max1 10 окт 2018, 15:43, всего редактировалось 1 раз.
Аватара пользователя
1max1
Адепт
 
Сообщения: 1636
Зарегистрирован: 28 июн 2017, 10:51

Re: Поиск координат, вакантных для респауна

Сообщение lawson 10 окт 2018, 15:35

Синтаксис:
Используется csharp
 static bool[,] Field = new bool[64, 64];

 public void MakeStep(Vector2Int from, Vector2Int to) {
  Field[from.x, from.y] = false;
  Field[to.x, to.y] = true;
 }

 public Position GetFreeRandomPosition() {
  while(true) {
   int randomX = Random.Range(0, 64);
   int randomY = Random.Range(0, 64);
   if (Field[randomX, randomY] == false && tiles[randomX, randomY] != TileType.Water) {
    Position result = new Position(randomX, randomY);
    return result;
   }
  }
 }


Раз ваш персонаж шагает только по клеткам значит должен быть метод где он переходит с одной клетки на другую, для этого при переходе вызываем метод MakeStep который в Вашем булевом поле(хотя оно нахрен не нужно) помечает занятые и свободные клетки. Раз поле у нас одно, оно может быть статическим, чтобы не создавать его каждый раз при поиске клетки, как у вас. Одним циклом(правда бесконечным) с помощью рандома находим пустующую клетку.

Надеюсь, что полностью весь алгоритм у вас совершенно другой, так как все эти примеры - бред, карты строятся не так, есть куча информации в сети как генерировать карты состоящие из тайлов, тем более она у вас в 2D. Только после правильного выбранного метода постройки вы сможете уже приступать к алгоритму поиска клеток, без всякого этого нытья как "эффективней".

Скрытый текст:
ПС. Писал тут так что могут быть ошибки.
lawson
UNIверсал
 
Сообщения: 409
Зарегистрирован: 14 сен 2012, 21:20

Re: Поиск координат, вакантных для респауна

Сообщение 1max1 10 окт 2018, 15:45

Надеюсь, что полностью весь алгоритм у вас совершенно другой, так как все эти примеры - бред, карты строятся не так, есть куча информации в сети как генерировать карты состоящие из тайлов, тем более она у вас в 2D. Только после правильного выбранного метода постройки вы сможете уже приступать к алгоритму поиска клеток, без всякого этого нытья как "эффективней".

Да ну ты чо, у него самый лучший код на свете, иначе быть не может...
Аватара пользователя
1max1
Адепт
 
Сообщения: 1636
Зарегистрирован: 28 июн 2017, 10:51

Re: Поиск координат, вакантных для респауна

Сообщение maksimov 10 окт 2018, 16:27

1max1 писал(а):У нас завелся ... Что ты ждешь ... на этом форуме?

Непосредственно от вас, я уж 100% ничего не жду. Если бы я, начал ожидать что-либо от вас, это могло бы служить основанием подозревать меня в слабоумии. ))

Совершенно очевидно, что вопрос был задан не вам (не такому как вы).
К слову, на этом форуме я появился как минимум на четыре года раньше вас (это одновременно и касательного того, кто тут "завёлся", и вашего умения "работать с информацией").

И этот форум сотни раз выручал меня. Причём делал это не благодаря, но исключительно вопреки, таким как вы, 1max1.

1max1 писал(а):И еще пару слов про твой

Смысл? Я же уже попросил вас, не "помогать" мне. Вы готовы "через пол галактики проползти за мной на брюхе", лишь бы продолжить делиться со мной своими, столь неинтересными мне, мнениями и "знаниями"?
Неужели вам больше некому "помочь"? Возможно, вам лучше излить свой энтузиазм на них?

1max1 писал(а):Видишь ли

Видите ли... то что вы написали далее, является чушью. Но вы этого не понимаете. Потому что очень глупы.
У вас, конечно же, другое мнение на этот счёт. Потому что вы очень глупы.
Патовая ситуация.

А далее, вы можете либо смириться с тем, что мне не интересна ваша "помощь", либо продолжить истерить по данному поводу (с тем же, нулевым результатом).
Красота — не прихоть полубога, а хищный глазомер простого столяра.
Аватара пользователя
maksimov
UNIт
 
Сообщения: 148
Зарегистрирован: 19 фев 2013, 11:48
  • Сайт

Re: Поиск координат, вакантных для респауна

Сообщение maksimov 10 окт 2018, 17:16

lawson писал(а):Надеюсь, что полностью весь алгоритм...

Чуть ранее, мы с вами выяснили, что ваших компетенций не хватает даже на то, что бы прочитать пост на который вы "отвечаете". Что несколько обесценивает (для меня) ваши огульные оценки моих "алгоритмов". :)
Уж простите.

lawson писал(а):при переходе вызываем метод ... который в Вашем булевом поле... помечает занятые и свободные клетки

Клетка может быть "занята" одновременно несколькими персонажами. Благодаря чему, для её "освобождения" пришлось бы каждый раз пробегать по всем персонажам с проверкой их расстояния от неё. При каждом шаге каждого персонажа проверять каждую освобождающуюся клетку на её занятость каждым из остальных персонажей. Браво! Вы только что придумали, как на пустом месте увеличить время выполнения задачи в несколько тысяч раз. :))

К слову, то, на что я обратил сейчас ваше внимание - САМООЧЕВИДНО.
По крайней мере для меня. А для вас нет. И тем не менее, вы "пытаетесь" мне "подсказать" что-то. Вы - мне.
А потом ещё и обижаетесь, когда я пытаюсь избежать подобного "содействия".
Как будто у меня "есть выбор". ))


lawson писал(а):Раз поле у нас одно, оно может быть статическим, чтобы не создавать его каждый раз при поиске клетки, как у вас.

И, ЕЩЁ РАЗ, в качестве иллюстрации, сказанного выше.

Поле одно. Про ваш метод, я написал выше. Это не метод оптимизации, а метод тысячекратного увеличения потребления процессорного времени, на пустом месте. А для моего метода (второго), массив необходимо перед каждым использованием "обнулять" (делать значение всех элементов - false).
Вы таки удивитесь, но между "держать статический массив, и каждый раз перед использованием пробегаться по нему циклом, "стряхивая" предыдущие значения" и "каждый раз инициировать новый локальный массив" - разница в ДЕСЯТКИ раз. И отнюдь не в пользу статического массива.


lawson писал(а):Одним циклом(правда бесконечным) с помощью рандома находим пустующую клетку.

И снова, ЕЩЁ РАЗ, в качестве иллюстрации, сказанного выше.
Цикл с рандомом использовался в моём первом методе, где полученная таким образом клетка, далее проверялась на доступность, путём проверки расстояния до неё, всех существующих персонажей. Формирование "матрицы доступных клеток" использовалась во втором моём методе.
Предложение, сначала сформировать "матрицу доступных клеток", а потом прыгать по ней зачем-то рандомом, настолько ЛИШЕНО СМЫСЛА (зачем рандомом, когда можно просто перебирать элементы один за другим, пока не найдём первый подходящий?!), что я начинаю подозревать, что вы так до сих пор и не прочли изначальный пост, на который продолжаете пытаться "ответить".
Красота — не прихоть полубога, а хищный глазомер простого столяра.
Аватара пользователя
maksimov
UNIт
 
Сообщения: 148
Зарегистрирован: 19 фев 2013, 11:48
  • Сайт

Re: Поиск координат, вакантных для респауна

Сообщение 1max1 10 окт 2018, 17:21

Выздоравливай)
Аватара пользователя
1max1
Адепт
 
Сообщения: 1636
Зарегистрирован: 28 июн 2017, 10:51

Re: Поиск координат, вакантных для респауна

Сообщение seaman 10 окт 2018, 18:21

Клетка может быть "занята" одновременно несколькими персонажами. Благодаря чему, для её "освобождения" пришлось бы каждый раз пробегать по всем персонажам с проверкой их расстояния от неё.

Браво, но это придумал ты!
Кто тебе запрещает занятость клетки отмечать не булевой переменной, а целым числом?
seaman
Адепт
 
Сообщения: 7535
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Поиск координат, вакантных для респауна

Сообщение maksimov 10 окт 2018, 18:48

seaman писал(а):Кто тебе запрещает занятость клетки отмечать не булевой переменной, а целым числом?

Хм... В таком варианте, да, метод рабочий.
Сейчас погоняю его, прикину, что на этом можно будет выиграть/проиграть.

Спасибо!
Красота — не прихоть полубога, а хищный глазомер простого столяра.
Аватара пользователя
maksimov
UNIт
 
Сообщения: 148
Зарегистрирован: 19 фев 2013, 11:48
  • Сайт

Пред.

Вернуться в Скрипты

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

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