Я хотел бы сделать изометрический платформер в стиле бег-прыжок. Игрок должен иметь возможность прыгать на верхнюю часть платформ над полом, ударять в сторону предметов и т. Д.
Я буду использовать движок 2D игры, поэтому я не хотел бы эмулировать полное столкновение 3D для измерений, которые я не использую.
Я думаю, что объекты в игре должны быть размещены с использованием: X, Y, ширина, высота и Z для глубины.
Используя эти значения, как я должен обнаружить столкновения?
collision-detection
isometric
jdeseno
источник
источник
Ответы:
2 варианта:
Вы можете рассматривать это как трехмерную игру с фиксированной орфографической камерой. Тогда вы можете использовать любые стандартные ресурсы 3D-игр / книги / учебники / библиотеки. Даже если он отображается в 2D со спрайтами, математика для движения и т. Д. Все равно будет 3D за сценой. Это даст вам самые точные результаты.
Вы могли бы рассматривать это как нисходящую 2D-игру с дополнительным свойством высоты. Например, представьте двумерную сетку, где каждая плитка имеет значение высоты. При переходе от одной плитки к другой вы позволяете персонажу переходить на конкретную плитку только в том случае, если ноги персонажа выше или равны высоте этой плитки, но если они прыгают и гравитация опускает их сверху плитки, вы пусть они остаются там. Приложив немного больше работы, вы можете сделать это, чтобы вы могли ходить под мостами и т. Д.
источник
Есть много способов упростить это. Например, если вы не разрешили слои (например, мост, по которому вы можете проходить и проходить, и под ним, вы можете сделать все обнаружение столкновений в измерениях X / Y, где вы отфильтруете набор столкновений по любому из его высоты + глубины). или выше.
источник
Если игра основана на прямоугольной сетке, то эта сетка определяет ваши оси X / Y. И Z можно использовать для высоты.
Столкновения тогда более-менее просты, как любая 2D-игра на основе тайлов.
Тогда вам просто нужно конвертировать из сетки обратно в изометрические координаты экрана для рендеринга. Это довольно просто - но вам может понадобиться подумать о вычислении значений «глубины» для целей сортировки (рендеринг изометрической сцены сзади вперед)
источник
Погуглив вокруг я нахожу это демо: http://planetskill.com/iso/
Он реализует только столкновение с осью вверх / вниз, но добавить другое столкновение должно быть легко:
Если позиция вверх / вниз следующего шага выше вашего максимума, просто не двигайтесь. Это также должно позволить вам легко выполнять прыжки.
Пример кода здесь: http://gist.github.com/478997
источник
Все вышеперечисленное. Изометрические - это всего лишь сдвинутая двумерная сетка, поэтому рассматривайте ее как двумерную карту листов и придумайте способ кодирования глубины. Как бы вы сделали это в обычной 2d игре (имея возможность «прыгать» позади или перед блоками? Вы либо сохраняете глубину для плитки (глубина буфера -> буфер z), либо используете несколько слоев или, если вы хотите более изощренный, вы бы реализовали функцию обратного вызова для каждого типа плитки (или сопоставления) и могли бы делать все, что захотите, проверять глубину, проверять оборудование, перемещать игрока вокруг, заставлять игрока медленно двигаться вверх, форматировать HD.
источник
Ну, у вас может быть отдельный слой столкновений выше вашего уровня, который не виден, и используйте его для проверки столкновения. Вы также можете использовать это для нескольких слоев, если вы знаете, на каком слое находится игрок;)
источник