Як обробити ізометричне виявлення зіткнення?


14

Я хотів би зробити ізометричний платформер у стилі біг-стрибок. Гравець повинен мати можливість стрибати на майданчику над підлогою, вдарятись об боки предметів тощо.

Я буду використовувати 2D ігровий двигун, тому я не хотів би імітувати повне зіткнення 3D за розмірами, якими я не користуюся.

Я думаю, що об'єкти в грі слід розміщувати, використовуючи: X, Y, ширину, висоту та Z для глибини.

Як використовувати ці значення, як я можу виявити зіткнення?


Я знаю, що це загальне питання, але я хотів би більш детальних відповідей або посилань на хороші навчальні ресурси.
jdeseno

Відповіді:


19

2 варіанти:

  • Ви можете трактувати це як 3D-гру з фіксованою ортографічною камерою. Тоді ви можете використовувати будь-які стандартні ресурси для 3D-ігор / книги / підручники / бібліотеки. Навіть якби це було зроблено в 2D зі спрайтами, математика для руху і т. Д. Все одно буде тривимірною. Це дало б найточніші результати.

  • Ви можете трактувати це як 2D-гру з верху вниз, із властивістю доданої висоти. Наприклад, уявіть 2D сітку, де кожна плитка має значення висоти. Переміщуючись з однієї плитки на іншу, ви дозволяєте персонажу переходити до певної плитки, якщо ноги персонажа вище або дорівнюють висоті цієї плитки, але якщо вони стрибають, а сила тяжіння зводить їх поверх плитки, ви нехай вони залишаються там. З трохи більше роботи ви зможете зробити це, щоб ви могли ходити під мостами тощо.


4

Існує маса способів спростити це. Наприклад, якщо ви не дозволили шари (наприклад, міст, по якому можна пройти і під, і під ним, ви могли б зробити все виявлення зіткнення в розмірах X / Y, де ви фільтруєте встановлене зіткнення на будь-яку його висоту + глибину або вище.


2

Якщо гра заснована на прямокутній сітці, то ця сітка визначає ваші осі X / Y. І Z може використовуватися для висоти.

Тоді зіткнення настільки ж більш-менш легкі, як і будь-яка 2D гра на основі плитки.

Тоді вам просто потрібно перетворити з сітки назад в ізометричні координати екрана для візуалізації. Це досить просто - але вам може знадобитися подумати про обчислення значень «глибини» для сортування (рендеринг ізометричної сцени зі спини вперед).


Використання Z для висоти суперечить інстинкту, але це правильне рішення для 2D-ігор зверху вниз. тоді ви можете повторно використовувати код між іграми, розташованими поруч, і зверху вниз.
Iain

2

Гулячи навколо, я знаходжу цю демонстрацію: http://planetskill.com/iso/

БУДЬ рухатися. Пробіл для стрибка

Він реалізує лише зіткнення з віссю вгору / вниз, але додати інше зіткнення має бути просто:

Якщо позиція вгору / вниз наступного кроку вище, ніж ваша максимальна величина, просто не рухайтесь. Це також повинно дозволяти вам здійснювати стрибки просто.

Зразок коду тут: http://gist.github.com/478997


2

Все вищеперераховане. Ізометричний - це просто зрізана 2d сітка, тому трактуйте її як 2d мапу плитки і продумайте спосіб кодування глибини. Як би ви це зробили в звичайній 2-грі (якщо ви можете переходити позаду або перед блоками, коли 'стрибати'? Ви б або зберігали глибину на плитку (буфер глибини-> z буфер), або використовували кілька шарів або, якщо ви хочете фантазії, ви реалізуєте зворотний виклик за тилетипом (або картографічним розташуванням) і зможете робити все, що завгодно, перевірити глибину, перевірити обладнання, плеєр-плеєр, програвач повільно рухатиметься вгору, форматує HD.


Гарна відповідь Kaj - це суть справи, я дивуюсь, що ніхто більше не підніс це. Це завжди те, що бентежить новачків щодо ізометрії, що стосується фізики.
Інженер

1

Добре, у вас може бути окремий шар зіткнення вище рівня, який не видно, і використовувати його для перевірки на зіткнення. Ви також можете використовувати це для декількох шарів, доки ви знаєте, на якому шарі знаходиться гравець;)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.