Я всегда хотел создать старомодную двухмерную ролевую игру, такую как Star Ocean, Final Fantasy, Sword of Mana и даже сериал «Tales of», и, думаю, многие это делают. Но прежде чем написать хоть одну строчку кода, я много исследовал, рисовал и пробовал.
Я нашел почти все ответы на свои вопросы, но есть проблема, которую я не смог решить: как создать реалистичное, но простое обнаружение столкновений , как в играх, которые я назвал ранее?
Я уже знаю несколько способов расчета обнаружения столкновений, посмотрите на следующие примеры:
Ни один из них не удовлетворяет мои потребности.
- Столкновения на основе плитки слишком просты и больше подходят Zelda, чем Star Ocean. Кроме того, рисунок каждой плитки должен заполнить все пространство, чтобы выглядеть реалистично.
- Pixel-perfect имеет слишком много ограничений. Если у вашей плитки есть кое-где пиксель, игрок, скорее всего, застрянет в середине нигде (то есть: в некоторых играх вы застреваете в корне дерева шириной 2 пикселя).
- И бинарные маски используют слишком много памяти и настроек imo.
Я прочитал много документации, но я никогда не нашел то, что выглядело хорошо для меня. И все мои попытки не были похожи на то, с чем я играл. Так что, если у вас есть хорошие ссылки или руководства о том, как работает 2D RPG, пожалуйста, дайте мне знать.
источник
Ответы:
N Tutorials может помочь здесь. По общему признанию, они для платформера аркадного стиля, но они будут работать так же хорошо для RPG с видом сверху вниз; просто не применяйте гравитацию. Предполагается, что тестирование на столкновение происходит в наборе основных фигур - кругов, ограничивающих ось ограничивающих рамок, линий, точек и так далее.
Затем вы каким-то образом либо украшаете свой мир ими (возможно, с помощью специального редактора уровней), либо автоматически генерируете их (поместите ближайший прямоугольник или кружок) - или оба (по умолчанию это автоматически сгенерированный прямоугольник / кружок и позволяют дизайнеру настроить) ,
Там, где я работаю, мы сделали немало платформеров и несколько нисходящих исследовательских игр. Мы занимаемся ими со времен GBA. Мы чаще всего используем AABB для символов и объектов, настраиваемых в редакторе спрайтов, - и мы сходим с ума здесь, позволяя кучу ящиков на спрайт, некоторые с разными целями. Мы могли бы иметь:
Уровни в основном представляют собой строки отрезков; у нас есть немного метаданных на сегмент для описания поврежденных или скользких поверхностей и т. д.
Таким образом, большая часть обнаружения столкновений и реагирования становится AABB-vs-AABB или AABB-vs-сегмент. Иногда мы бросаем круг против чего-то для снаряда, хотя часто AABB будет делать и здесь.
Вам не нужно много базовых форм, чтобы все выглядело хорошо и вело себя хорошо - некоторые из них подойдут, если вы можете настроить и повторить их.
Кроме того, не переживайте из-за смешения систем; Столкновение на основе плитки может быть превосходным в некоторых областях (представляющих большую часть вашего мира), но ужасным для взаимодействий объект-объект. Хорошо; используйте другую систему для object-vs-object! Написание для взаимодействия между двумя системами может быть проще, чем вы думаете.
источник