Как сделать сенсорную навигацию в Phaser? - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть базовая c игра со змеями, написанная на Phaser 3, и я хотел бы добавить к ней сенсорную навигацию. Текущая навигация выглядит следующим образом (в методе обновления) и для стрелок на клавиатуре:

 if (this.cursors.left.isDown ) {
 this.snake.faceLeft();
 } else if (this.cursors.right.isDown |) {
 this.snake.faceRight();
 } else if (this.cursors.up.isDown ) {
 this.snake.faceUp();
 } else if (this.cursors.down.isDown) {
 this.snake.faceDown();
 }

Я хочу сделать это либо смахиванием, либо касанием (т. Е. Змея идет вверх, пользователь нажимает слева от голова поворачивается влево, пользователь нажимает справа от головы, она направляется вправо). Я пытался сделать это с помощью методов обратного вызова, как в этой теме: ссылка , но я не могу использовать эти значения вне методов обратного вызова. Я попытался добавить сенсорную навигацию с указателем так:

 this.pointer = this.input.activePointer;
 if (
 this.cursors.left.isDown ||
 (this.pointer.isDown && this.snake.head.x - this.pointer.x > 0)
 ) {
 this.snake.faceLeft();
 } else if (
 this.cursors.right.isDown ||
 (this.pointer.isDown && this.pointer.x - this.snake.head.x > 0)
 ) {
 this.snake.faceRight();
 } else if (
 this.cursors.up.isDown ||
 (this.pointer.isDown && this.snake.head.y - this.pointer.y > 0)
 ) {
 this.snake.faceUp();
 } else if (
 this.cursors.down.isDown ||
 (this.pointer.isDown && this.pointer.y - this.snake.head.y > 0)
  ) {
 this.snake.faceDown(); 
 }

Но проверка выполняется так быстро, что змея сходит с ума. Любая помощь будет оценена!

...