Вторник, 23 Апреля 2024, 19:46

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Пути-пути! (Приманивание монстров.)
Пути-пути!
DecedentДата: Среда, 16 Июня 2010, 14:14 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Суть проблемы:
У меня есть несколько обьектов "enemy", которые при определенных обстоятельствах должны двигаться к герою.
Двидение осуществляется с помощю путей через сетку планирования движения. Если герой подходит слишком близко к врагу инициируется просчет пути от врага до героя, после чего враг начинает двигаться в заданном направлении. Проблема в том, что если имеется несколько инстансов одного обьекта, то путь просчитывается для всех один, после чего следовательно обьекты дружно начинают следовать одним и тем же путем из разных точек.

Для персонализации пути я пытался использовать функцию path_add() и переменную индексом только что созданного пути закрытые в контейнер with self. Ничерта не вышло. Нужна помощ в решении проблемы.

Если обьяснил не очень понятно, пишите — разжую.

Сообщение отредактировал Decedent - Среда, 16 Июня 2010, 14:23
NeZnayuДата: Среда, 16 Июня 2010, 14:16 | Сообщение # 2
__танцуй!__
Сейчас нет на сайте
А mp_potential_step - не вариант?
Или нужен именно mp_grid?


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
DecedentДата: Среда, 16 Июня 2010, 14:23 | Сообщение # 3
почетный гость
Сейчас нет на сайте
В том то и дело, что нужен mp_grid. Вся механика движения на этом держится.
NeZnayuДата: Среда, 16 Июня 2010, 14:50 | Сообщение # 4
__танцуй!__
Сейчас нет на сайте
Можешь цитировать код, которым добавляешь пути? (там где path_add)

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
DecedentДата: Среда, 16 Июня 2010, 15:04 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Только по памяти smile

var path;
with self {
path=path_add()
mp_grid_path(id,path,enemy.x,enemy.y,hero.x,hero.y,1)
if path_exists(path) path_start()}

По идее каждый инстанс должен создавать отдельный путь, и начинать движение по этому пути. Переменная то локальная.

NeZnayuДата: Среда, 16 Июня 2010, 15:17 | Сообщение # 6
__танцуй!__
Сейчас нет на сайте
Может проблема в том что за начало координат берутся значения enemy - который по идее является идентификатором самого первого созданного объекта enemy.
Попробуй так:
mp_grid_path(id,path,x,y,hero.x,hero.y,1)


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
DecedentДата: Среда, 16 Июня 2010, 19:18 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Э... как это я упустил? Ладно, попробую. Плюс авансом.

Добавлено (16.06.2010, 19:18)
---------------------------------------------
Точно так. Проблема была в координатах. Еще раз спасибо.

AltairSДата: Среда, 16 Июня 2010, 20:25 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Из названия темы я подумал что это какой то флуд(что тема в флуде).
biggrin


Моя статья по созданию Hidden Object игр

Дедушка,я тебя никогда не забуду,покойся с миром...
FedenkoVadikДата: Среда, 16 Июня 2010, 20:42 | Сообщение # 9
Level 5 Gentleman
Сейчас нет на сайте
Quote (AltairS)
я подумал что это какой то флуд

Правильно подумал. Как 2 последних поста...
Made_In_USSRДата: Четверг, 17 Июня 2010, 13:08 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Продолжая тему флуда:

Опять же проблема с сеткой движения. Есть нужда вычислить предидущую ячейку сетки в которой находился обьект с последующим снятем свойства forbidden. На данный момент у меня созрел такой алгоритм:
1. Вычислить текущую клетку в которой находится обьект и записать значения в переменную (точнее в две h и w).
2. Отследить изменение значения переменных таким образом вычислив уже текущую и предыдущую ячейки.
3. Очистить предыдущую ячейку.

Собственно понятно, с каким пунктом возникли затруднения. Как отслеживать изменеие значения переменной с последующим сохранением двух новых значений.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
NeZnayuДата: Четверг, 17 Июня 2010, 13:13 | Сообщение # 11
__танцуй!__
Сейчас нет на сайте
Записывать каждую клетку движения, после перехода на следующую - значения записывать в отдельные переменные предыдущего шага, а затем снова записывать текущие.
Получается что-то вроде хprevious, уprevious..


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
Made_In_USSRДата: Четверг, 17 Июня 2010, 13:39 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
В теории мне это ясно, а вот как на практике кодом выразить... Ладно, не буду никого заморачивать пока, может все таки мозг сам сообразит...

Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
NeZnayuДата: Четверг, 17 Июня 2010, 13:49 | Сообщение # 13
__танцуй!__
Сейчас нет на сайте
Можно каждый степ проверять вписывается ли объект в сетку, и если да - записывать переменные.

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
Made_In_USSRДата: Воскресенье, 20 Июня 2010, 15:21 | Сообщение # 14
заслуженный участник
Сейчас нет на сайте
Quote (NeZnayu)
Можно

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

Добавлено (19.06.2010, 14:07)
---------------------------------------------
Решил одну проблему, а она мне наплодила других...

Дело было так: сделал я обьект, который при перемещении по сетке запрещает ячейку в которой находится. Стал к обьекту прикручивать сетку, и выяснил, что обьект то двигаться по ней не может, потому как путь не просчитывается из запрещенной ячейки. Шо рабить?

Есть конечно вариант создавать под каждый обьект сетку, и удалять за ненадобностью, но! Таких обьектов может быть одновременно очень много (30-40 к примеру).
Вопрос такой — возможно ли каким нибудь другим путем решить проблему просчета пути кроме как создавать сетки в огромных колличествах. Мне как бэ нужна теория.

Добавлено (20.06.2010, 15:21)
---------------------------------------------
Вот еще головоломка:

Монстрики, которые у меня теперь бегают каждый по своему пути ведут себя практически адекватно. Подходят к врагу, атакуют. Красота одним словом. Есть в них правда маленький изъян. Монстрики эти после некоторого времени беготни за гг, о обги, сливаются в одного. Не в результате каких то магических действий, как некоторые могут подумать, нет. Они просто становятся всей толпой в одну координату. Как их заставить окружить игрока, не используя при этом столкновения (хотя это не обязательно)?


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)


Сообщение отредактировал Made_In_USSR - Суббота, 19 Июня 2010, 14:09
NeZnayuДата: Воскресенье, 20 Июня 2010, 16:00 | Сообщение # 15
__танцуй!__
Сейчас нет на сайте
Quote (Made_In_USSR)
Они просто становятся всей толпой в одну координату. Как их заставить окружить игрока, не используя при этом столкновения (хотя это не обязательно)?

просто проверять следующую клетку на наличие монстрика, и если он там есть:
x=xprevious
y=yprevious


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
froexДата: Воскресенье, 20 Июня 2010, 16:16 | Сообщение # 16
Руководитель Froexilize team
Сейчас нет на сайте
Можно для игрока завести "показатель опасности сторон", где будет указываться, сколько монстров с каждой из сторон стоит. Пусть монстры стремятся встать с той стороны, где этот показатель наименьший. Соответственно, сторон можно для начала взять в районе 12 (расположение равномерное как на часах). Если монстры большие, то можно показатель опасности увеличивать на большее число, тогда мелкие монстры будут отбегать с другой стороны, что по логике будет означать их мысли: "Ой, да не задави меня этот большой монстр - пойду с другой стороны покумекаю".

Добавлено (20.06.2010, 16:16)
---------------------------------------------
Кстати, хитрость можно использовать в том, что если игрок одной стороной около стены, то сделать показатель опасности со стороны стены максимальным (скажем 65 тысяч, что не достигнется монстрами), тогда монстры не будут со стороны стены подходить.

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


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.
Made_In_USSRДата: Воскресенье, 20 Июня 2010, 16:19 | Сообщение # 17
заслуженный участник
Сейчас нет на сайте
Quote (NeZnayu)
просто проверять следующую клетку на наличие монстрика, и если он там есть: x=xprevious y=yprevious

Твоим методом не получится. Почему? Тут много причин. Проще бы наверное дать тебе исходник посмотреть. Покопаешься?


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
NeZnayuДата: Воскресенье, 20 Июня 2010, 16:19 | Сообщение # 18
__танцуй!__
Сейчас нет на сайте
Давай.

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
Made_In_USSRДата: Воскресенье, 20 Июня 2010, 16:34 | Сообщение # 19
заслуженный участник
Сейчас нет на сайте
Отправил личку. Возможно будут вылезать ошибки. Пришлось музыку некоторую выбросить, что обьем ужать.

Добавлено (20.06.2010, 16:34)
---------------------------------------------
Ах да, монстрики не двигаются так как под ними запрещенные ячейки. Закомментируй функции mp_grid_add_cell в обьекте o_enemy grunt. Музыку можно отрубить в room creation code r_village.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)


Сообщение отредактировал Made_In_USSR - Воскресенье, 20 Июня 2010, 16:43
froexДата: Воскресенье, 20 Июня 2010, 16:36 | Сообщение # 20
Руководитель Froexilize team
Сейчас нет на сайте
Made_In_USSR, мой вариант рассмотрел?

Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.


Сообщение отредактировал froex - Воскресенье, 20 Июня 2010, 16:38
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Пути-пути! (Приманивание монстров.)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг