С Phaser (и последующими инструкциями) прыгать очень легко благодаря предоставленному физическому модулю Arcade. Однако меня раздражает тот факт, что игрок может прыгать только тогда, когда он находится «на» земле из-за использования логики «игрок-касание».
Код, который я использую, основан на Game Mechanic Explorer, Platformer #4 и следует за ним;
var canJump = this.player.body.touching.down;
if (canJump && this.upInputIsActive()) {
this.player.body.velocity.y = this.JUMP_SPEED;
}
Я хотел бы, чтобы игрок мог прыгать, когда он очень близко к земле, но еще не касается, чтобы повторный прыжок/прыжок при приземлении является более текучим. Таким образом, и наблюдение, что ограничение вызвано touching.down
игрока, мои вопросы;
Можно ли определить расстояние («насколько высоко») игрок от земли (которая может быть платформой) непосредственно под ним? Тогда
canJump
— это просто функция расстояния, верная только для очень малых значений.Можно ли расширить виртуальный хит-бокс вокруг игрока (который будет путешествовать вместе с игроком), чтобы его собственный
touching.down
можно было использовать для обнаружения этого случая? Этот подход лучше? Сам спрайт игрока не должен подниматься над землей или подвергаться каким-либо другим воздействиям.
Цель здесь состоит в том, чтобы позволить игроку прыгать как раз перед тем, как он должен быть в состоянии, поэтому запоминание нажатия клавиши вверх в течение короткого промежутка времени, что может быть жизнеспособным, не является решением. Я ищу в этом конкретном случае.