У меня есть вопрос, который сводит меня с ума, потому что я думаю, что будет довольно легко найти учебник по нему. В настоящее время я использую XNA и Farseer, чтобы создать простую платформерную игру. Я собираюсь покончить с этим, но я хочу, чтобы мои монстры были умнее. В данном случае это означает, что я не хочу, чтобы мои монстры падали со скал.
Проще говоря, я хочу что-то, что проверяет область перед моим «монстром», чтобы определить, когда монстр должен изменить направление. Не могли бы вы, ребята, указать мне правильное направление?
Что я должен использовать, должно быть простое решение или простой алгоритм, чтобы проверить это, нет?
источник
Один из наивных способов его реализации - использование радиовещания.
Подсчитайте, где ваш монстр будет в какой-то небольшой отрезок времени (вероятно, кадр). Из этой позиции (или, если вы хотите быть более устойчивой, эта позиция +/- ограничивающая область вашего врага) сделайте радиопередачу вниз. Если он не попадает во что-то в пределах соответствующего диапазона (в зависимости от того, где вы начинаете свою лучевую трансляцию по вертикали, от высоты персонажа, от желаемого вами «размера шага» и т. Д.), Вы можете предположить, что там находится утес, где персонаж хочет быть, и решить изменить направление соответствующим образом.
источник
С моим ИИ я просто проверяю, есть ли платформа внизу и определяет направление ее движения (не используя систему плиток, а просто отличную систему столкновений). Если нет - или если он попадает в сплошной блок, он выглядит озадаченно и оборачивается.
Таким образом, вы можете иметь динамические карты и все еще иметь работающий (термин используется свободно) ИИ.
источник
Я подозреваю, что вы используете карту тайлов, и в этом случае решением будет сделать это на основе индексов тайлов. Вам нужно узнать, на какой плитке в данный момент находится ваш монстр, по следующим формулам:
Как только вы знаете это, вы должны найти, в каком направлении Х вы идете (чтобы проверить блоки впереди):
Теперь у вас есть нормализованное направление X для работы.
Далее, вы хотите проверить блоки вокруг, чтобы увидеть, если вы должны изменить направление:
Вы получите общую идею. Убедитесь, что вы возвращаете
TileCollision.Impassable
(или что-то еще), если индексы плитки находятся за пределами карты, чтобы предотвратить сбой вашей программы с недопустимым индексом, а также предотвращает выход монстров за пределы карты.Я думаю, это действительно зависит от того, как вы работаете с плитками, но это решение, которое сработало для меня.
Основано на учебниках с http://www.sgtconker.com/ (хотя сайт не работает, когда я пишу это)
источник
Установите флажок на внешней стороне платформы, который находится на отдельном слое, и пусть монстры проверит это, чтобы они не упали, но игрок все еще может.
источник