Как создать реалистичную двухмерную ролевую игру с обнаружением столкновений?

9

Я всегда хотел создать старомодную двухмерную ролевую игру, такую ​​как Star Ocean, Final Fantasy, Sword of Mana и даже сериал «Tales of», и, думаю, многие это делают. Но прежде чем написать хоть одну строчку кода, я много исследовал, рисовал и пробовал.

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

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

Примеры обнаружения столкновений

Ни один из них не удовлетворяет мои потребности.

  • Столкновения на основе плитки слишком просты и больше подходят Zelda, чем Star Ocean. Кроме того, рисунок каждой плитки должен заполнить все пространство, чтобы выглядеть реалистично.
  • Pixel-perfect имеет слишком много ограничений. Если у вашей плитки есть кое-где пиксель, игрок, скорее всего, застрянет в середине нигде (то есть: в некоторых играх вы застреваете в корне дерева шириной 2 пикселя).
  • И бинарные маски используют слишком много памяти и настроек imo.

Я прочитал много документации, но я никогда не нашел то, что выглядело хорошо для меня. И все мои попытки не были похожи на то, с чем я играл. Так что, если у вас есть хорошие ссылки или руководства о том, как работает 2D RPG, пожалуйста, дайте мне знать.

Aymeric
источник
2
Какую среду вы разрабатываете для того, чтобы маски столкновений занимали слишком много памяти? Это не имеет значения для большинства современных систем, и маски столкновений действительно звучат так, как вы ищете.
Грегори Эйвери-Вейр
Я большую часть времени работаю на ПК с XNA, но в последнее время я думал начать проект на WP7. Проблема, с которой я столкнулся с масками столкновений, заключалась в том, что при небольшом разрешении он действовал точно так же, как и идеальный пиксель, например, когда мой персонаж застревал в углу. Поэтому, если вы не используете кривую Безье для плавного движения, вам нужно быть очень осторожным при создании маски.
Aymeric

Ответы:

9

N Tutorials может помочь здесь. По общему признанию, они для платформера аркадного стиля, но они будут работать так же хорошо для RPG с видом сверху вниз; просто не применяйте гравитацию. Предполагается, что тестирование на столкновение происходит в наборе основных фигур - кругов, ограничивающих ось ограничивающих рамок, линий, точек и так далее.

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

Там, где я работаю, мы сделали немало платформеров и несколько нисходящих исследовательских игр. Мы занимаемся ими со времен GBA. Мы чаще всего используем AABB для символов и объектов, настраиваемых в редакторе спрайтов, - и мы сходим с ума здесь, позволяя кучу ящиков на спрайт, некоторые с разными целями. Мы могли бы иметь:

  • одна или несколько коллизий, описывающих форму объекта для столкновения с вещами;
  • возможно, множество «ящиков для атаки», которые появляются только тогда, когда вы находитесь в середине атаки (и анимируете с помощью спрайта), возможно, даже два или три на оружие, в зависимости;
  • несколько «уязвимых ящиков», которые будут получать урон при попадании в чужие ящики атаки - по умолчанию мы используем ящики для столкновений, но уязвимые ящики, как правило, чувствуют себя лучше, когда они меньше ящиков для столкновений, и мы можем разрешить для повреждения с учетом местоположения таким образом
  • один или несколько «ящиков активации» для ИИ, которые описывают область чувств для ИИ - они будут атаковать, например, если игрок находится в этом регионе.

Уровни в основном представляют собой строки отрезков; у нас есть немного метаданных на сегмент для описания поврежденных или скользких поверхностей и т. д.

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

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


Кроме того, не переживайте из-за смешения систем; Столкновение на основе плитки может быть превосходным в некоторых областях (представляющих большую часть вашего мира), но ужасным для взаимодействий объект-объект. Хорошо; используйте другую систему для object-vs-object! Написание для взаимодействия между двумя системами может быть проще, чем вы думаете.

Leander
источник