Найти тему
jsbook.ru

Разработка игры на phaserjs - 8: управление физическим телом в пространстве

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

На момент написания статьи Phaser поставляется с Arcade Physics, Impact Physics и Matter.js Physics. Для этого урока мы будем использовать систему Arcade Physics для нашей игры, которая проста и легка, идеально подходит для браузерных игр.

Когда Физический Спрайт создан, ему присваивается свойство body, которое является ссылкой на его Аркадное Физическое Тело. Это представляет спрайт как физическое тело в движке Phasers Arcade Physics. У объекта body есть много свойств и методов, с которыми мы можем управлять.

Например, чтобы симулировать влияние гравитации на спрайт, достаточно написать:

-2

Это произвольное значение, но логически, чем выше значение, тем тяжелее ощущается ваш объект и тем быстрее он падает. Если вы добавите это в свой код или запустите, вы увидите, что наш персонаж падает без остановки, полностью игнорируя созданную нами ранее площадку:

-3

так происходит потому что мы не проверяем соприкасается наш персонаж с землей или нет.

Мы уже сказали Phaser, что наша земля и платформы будут статичными телами. Если бы мы этого не сделали и вместо этого создали динамические, тогда, когда игрок столкнулся с ними, он на мгновение остановился бы, и после этого все бы рухнуло. Это объясняется тем, что, если не указано иное, наземный спрайт является движущимся физическим объектом, и когда игрок ударяет сталкивается с ним, сила полученная в результате столкновения ( два тела обмениваются своими скоростями ) начинает действовать на землю или платформы, поэтому и земля также начинает падать.

Для того что бы игрок мог безопасно прыгать по платформам, мы создадим объект Collider. Этот объект контролирует два физических объекта (которые могут включать в себя группы) и проверяет наличие коллизий или совпадений между ними. Если это произойдет, он может при необходимости вызвать ваш собственный обработчик, но для простой обработки столкновений с платформами нам это не требуется:

-4

Объект Collider берет на себя всю обработку по столкновению переданных нами объектов:

-5