Создание игры в Phaser. Часть 5 — Тело и скорость: Физика мира

Phaser поддерживает множество различных физических систем. Он поставляется с системами Arcade Physics, Ninja Physics и P2.JS. Для этого урока мы будем использовать систему Arcade Physics, которая является простой и легкой, и идеально подходит для мобильных браузеров. Вы заметите это в коде, который будет запускать работу системы физики,

Сначала спрайты получают новое свойство, которое является экземпляром ArcadePhysics.Body. Оно представляет спрайт в качестве физического тела в движке Arcade Physics. Объект body имеет много свойств, которые мы можем изменить. Для того, что бы имитировать эффект гравитации на спрайте напишем простую строчку:

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

part5

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

Таким образом, что бы позволить игроку сталкиваться с препятствиями и пользоваться свойствами физики необходимо ввести проверку столкновений в функции update:

Функция update вызывается в каждом кадре. Функция Physics.collide выполняет всю магию. Она принимает 2 объекта и проверяет их на столкновение. В данном случае мы передаем ей спрайт игрока и группу platforms. Функция запускает проверку на столкновение всех членов группы.

part6

Оригинал.