~1 мин чтения

Ввод

Клавиатура, указатель (мышь + касания) и геймпад — и то, как Phaser направляет события игровым объектам.

Phaser объединяет клавиатуру, указатель (мышь + касания) и геймпад за единым менеджером ввода, доступным как this.input.

Опрос против событий

Два допустимых стиля:

// Событийный стиль — реакция на один переход.
this.input.keyboard!.on('keydown-SPACE', () => this.jump());

// Стиль опроса — проверка состояния каждый кадр в update().
const cursors = this.input.keyboard!.createCursorKeys();
update() {
	if (cursors.left.isDown) this.player.x -= 4;
}

Опрос подходит для непрерывных действий (движение); события подходят для дискретных действий (прыжок, выстрел, выбор в меню).

Указатель

this.input.on('pointerdown', (pointer) => {
	const world = this.cameras.main.getWorldPoint(pointer.x, pointer.y);
	this.spawnAt(world.x, world.y);
});

Указатель всегда сообщает экранные координаты. Используйте camera.getWorldPoint для преобразования.

Интерактивность отдельных объектов

Для семантики «кликнуть по этому спрайту» включите объект в обработку:

button.setInteractive({ useHandCursor: true });
button.on('pointerdown', () => this.scene.start('Game'));

Phaser проверяет границы объекта (по умолчанию прямоугольник; попиксельно, если запрошено) и генерирует события только тогда, когда указатель действительно пересекает их.

Геймпад

Поддержка геймпада по умолчанию выключена — включите её в конфигурации игры:

input: { gamepad: true }

Затем читайте this.input.gamepad!.pad1?.buttons[0].pressed и т. п. в update.

Связанные темы

  • Камеры — источник getWorldPoint.
  • Сцены — у каждой сцены свои обработчики ввода; приостановка сцены приостанавливает её ввод.