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

Разработка игры на phaserjs - 8: управление физическим телом в пространстве Gamedev, Typescript, Javascript, HTML, Phaser, Холст, Длиннопост

Предыдущие посты ( по просьбе @Lionin ):


1. Введение

2. Выбор редактора

3. Hello world

4. Загрузка ресурсов

5. Создание мира

6. Как работают платформы

7. Создание персонажа

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

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

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

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

Разработка игры на phaserjs - 8: управление физическим телом в пространстве Gamedev, Typescript, Javascript, HTML, Phaser, Холст, Длиннопост

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

Разработка игры на phaserjs - 8: управление физическим телом в пространстве Gamedev, Typescript, Javascript, HTML, Phaser, Холст, Длиннопост

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

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

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

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

Разработка игры на phaserjs - 8: управление физическим телом в пространстве Gamedev, Typescript, Javascript, HTML, Phaser, Холст, Длиннопост

Лига Разработчиков Видеоигр

6.8K поста22.2K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"