Перейти к содержанию

Рекомендуемые сообщения

Наверное, я не сильно ошибусь, если скажу, что RTS стратегии - это самый сложный с точки зрения разработки жанр. Да что там говорить, если даже Ashley (разработчик Construct 3) забросил свою RTS Command & Command уже почти год тому назад. Эшли решил отказаться от главной фишки Construct (система событий) и сделать RTS используя JavaScript. И что в итоге? Реализовано выделение юнитов, стрельба, миникарта, всё. Эшли так и не придумал как сделать так, чтобы юниты не ходили сквозь друг друга.

Недавно я начал работу по созданию клона мобильной RTS стратегии Art of War 2. И вот, решил, что буду по ходу разработки публиковать в общий доступ исходники. Вдруг кому пригодится. Учитывая, что даже на официальном форуме Construct практически нет никакой информации по созданию RTS, уверен многим будет полезно. Это будут не уроки, а просто публикация исходников. Если у вас будут какие-либо вопросы - задавайте.

Содержание:

Изменено пользователем ViGaCi
Ссылка на комментарий
Поделиться на другие сайты

Движение юнитов без прохождения друг сквозь друга

giphy.gif

Попробовать на Scirra Arcade

  • каждый юнит имеет анимацию движения по каждому из восьми направлений
  • двигаясь юниты не сливаются в одну кучу и не проходят сквозь друг друга 

Moving with no overlapping (RTS game).c3p

Ссылка на комментарий
Поделиться на другие сайты

Не пересекаются, но поведение у них похоже на мышиную беготню %)

Копался в коде мода для одной ртски, а именно SCFAF, там была фсм, из разряда - перед юнитом ничего нет- продолжает движение, перед юнитом другой юнит и тот юнит находится в том же отряде - следовать за ним, если отряд не тот же - найти путь для обхода и вернуться на главный путь

А главный путь считался для целого отряда, чтобы не забивать проц лишними поисками пути

Мод был кажется про более продвинутый ИИ и комментарий от разраба мода был о том, что он не смог заюзать метод задания пути самой игры, потому скопировал его в свой мод и он заработал

Ссылка на комментарий
Поделиться на другие сайты

@cliva Ну, алгоритм, который реализован в исходнике я методом "черного ящика" списал с Art of War 2. То есть, снял геймплей на видео, а потом покадрово разбирал это видео и рисовал на бумаге схему с возможным алгоритмом поведения юнитов. Затем, уже в самой игре воссоздавал разные ситуации, чтобы проверить, насколько мой алгоритм соответствует тому, как юниты ведут себя в Art of War 2. Далее просто придумал как воссоздать этот алгоритм в Construct 3.

Есть очень много вариантов поиска пути для RTS игры. То, что хорошо подходит для одной игры может плохо подходить для другой. Если попробовать простыми словами описать реализованный в этом исходнике алгоритм, то он следующий:

  • игровое поле делится на клетки, в каждой клетке одновременно может находится лишь один юнит.
  • каждый юнит имеет переменную "State" (состояние).
  • когда игрок выбирает группу юнитов и даёт приказ двигаться, то каждый выбранный юнит получает координаты выбранной игроком точки, а переменная State юнитов принимает значение "Move".
  • далее каждый юнит (у которого State = "Move") просчитывает путь до конечной точки и начинает движение на соседнюю клетку (то есть на следующий нод на пути к конечной точке)
  • после того, как юнит начал движение на клетку, то эта клетка помечается  — стоимость прохода по ней возрастает до условных  "999".
  • следующий юнит, который также ищет путь на соседнюю клетку, предпочтёт найти путь в обход "дорогих" клеток.
  • если упростить, то движение выглядит как перемещение с одной клетки на другую. Это как если представить большое шахматное поле, в котором каждый юнит это шахматный король. И в порядке очереди каждый юнит двигается на свободную клетку на пути к цели. 
  • каждый раз, когда юнит покидает клетку, стоимость прохода по ней возвращается к норме.

Проблема в том, что когда игрок даёт большой группе юнитов команду двигаться, то все юниты (в порядке очереди) помечают соседние по отношению к себе клетки и каждый следующий юнит ищет путь в обход другого. Из за этого создаётся ощущение, будто юниты разбегаются в стороны друг от друга. Это только с одной стороны минус, но с другой стороны, такой хаос добавляет немного "реализма" к поведению юнитов. Если все они будут маршировать синхронно как "на параде", это тоже не очень правдоподобно выглядит.

Изменено пользователем ViGaCi
Ссылка на комментарий
Поделиться на другие сайты

Нашёл простой и эффективный способ решения проблемы, о которой выше писал @cliva

Знімок екрана (149).png

Раньше все юниты искали путь в тот самый момент, когда игрок тапает по экрану. Теперь поиск пути для каждого юнита происходит в порядке очереди, при этом, чем ближе юнит к точке назначения, тем раньше наступит его очередь искать путь.

БЫЛО

giphy.gif

СТАЛО

giphy.gif

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...