Дадим герою возможность прыгать дважды. После первого прыжка он сможет выполнить ещё один в воздухе. Затем для следующего прыжка нужно приземлиться на платформу.
Герой будет прыгать при нажатии в любом месте экрана. Подпишемся на pointerdown в классе GameScene:
export class GameScene extends Scene {
// ...
createHero() {
// ...
this.container.interactive = true;
this.container.on("pointerdown", () => {
this.hero.startJump();
});
}
// ...
}
Теперь нужно реализовать startJump в классе Hero:
export class Hero {
constructor() {
// ...
this.dy = App.config.hero.jumpSpeed;
this.maxJumps = App.config.hero.maxJumps;
this.jumpIndex = 0;
}
startJump() {
if (this.jumpIndex < this.maxJumps) {
++this.jumpIndex;
Matter.Body.setVelocity(this.body, { x: 0, y: -this.dy });
}
}
// ...
}
Счётчик jumpIndex ограничивает число прыжков до следующего касания платформы. Максимальное число задаётся свойством this.maxJumps.
Физический движок задаёт скорость тела героя. Для прыжка нужно перемещение только вверх по оси y, поэтому задаём отрицательное значение по y, хранящееся в this.dy.
Для удобной настройки вынесем скорость прыжка и число прыжков в глобальную конфигурацию:
export const Config = {
// ...
hero: {
jumpSpeed: 15,
maxJumps: 2,
//...
}
};