Обновлен:
Вот мой обновленный ответ, чтобы решить это дело.
Я реализовал этот метод на основе примера, предоставленного Phaser.
Ключевым моментом для выполнения этого фиксированного движения является отключение ввода с клавиатуры во время движения элемента.
Допустим, если вы нажали left
, player
сместится влево. В то время как player
начинает двигаться, вы устанавливаете переменную notMoving
в значение false, что уведомляет функцию update
о том, что курсор не принимает никаких вводов. После тайм-аута, скажем, 1000 мс, вы можете установить для переменной notMoving
значение true. Затем функция update
продолжит ввод курсора.
Вот пример кода:
function create ()
{
cursors = this.input.keyboard.createCursorKeys();
player = this.physics.add.image(400, 300, 'block');
player.setCollideWorldBounds(true);
player.setData('notMoving', true);
}
function setfixedMovement(velocity, direction) {
if (direction === 'up') {
player.setVelocityY(-velocity);
} else if (direction === 'down') {
player.setVelocityY(velocity);
} else if (direction === 'left') {
player.setVelocityX(-velocity);
} else {
player.setVelocityX(velocity);
}
player.setData('notMoving', false);
setTimeout(() => {
player.setData('notMoving', true);
}, 1000);
}
function update () {
if (player.getData('notMoving')) {
player.setVelocity(0);
if (cursors.left.isDown) {
setfixedMovement(300, 'left');
} else if (cursors.right.isDown) {
setfixedMovement(300, 'right');
}
if (cursors.up.isDown) {
setfixedMovement(300, 'up');
} else if (cursors.down.isDown) {
setfixedMovement(300, 'down');
}
}
}
Я поместил ссылку на пример фазера в предыдущем ответе. Если вы отредактируете пример и замените часть кода примера приведенным выше фрагментом кода, вы увидите, что он работает так, как вы ожидали.
Предыдущий ответ :
Я думаю, что этот пример фазера делает именно то, что вы хотите
Короче говоря,
в каждом обновлении установите скорость на 0,
затем обнаружить проверку состояния курсора и установить скорость соответственно
следующий код скопирован с официального примера Phaser 3
function update ()
{ player.setVelocity(0);
if (cursors.left.isDown)
{
player.setVelocityX(-300);
}
else if (cursors.right.isDown)
{
player.setVelocityX(300);
}
if (cursors.up.isDown)
{
player.setVelocityY(-300);
}
else if (cursors.down.isDown)
{
player.setVelocityY(300);
}
}
Вот ссылка на пример
https://labs.phaser.io/view.html?src=src\input\keyboard\cursor%20keys.js