В Phaser каждый игровой объект имеет свойства x и y, которые определяют его положение на сцене. Эти координаты задаются в пикселях относительно верхнего левого угла сцены (координата 0,0).
Пример установки координат при создании спрайта:
let player = this.add.sprite(100, 150, 'playerTexture');
console.log(player.x, player.y); // 100, 150
Изменение координат после создания объекта:
player.x = 200;
player.y = 300;
Прямое присваивание координат удобно для простых перемещений и мгновенной смены позиции, но не всегда оптимально для комплексных действий с объектами.
Метод setPosition(x, y) предоставляет более удобный и безопасный способ установки позиции объекта. Он позволяет изменять координаты сразу по обеим осям и возвращает объект для цепочек вызовов.
player.setPosition(400, 200);
Особенности метода:
player.setPosition(500); // x = 500, y остаётся прежним
player.setPosition(100, 150).setScale(2).setAngle(45);
this.tweens.add({
targets: player,
x: 600,
y: 400,
duration: 1000,
ease: 'Power2'
});
Phaser использует локальные координаты объектов относительно их родителя. Если объект находится внутри контейнера или группы, координаты x и y задают позицию относительно контейнера:
let container = this.add.container(50, 50);
let child = this.add.sprite(0, 0, 'childTexture');
container.add(child);
console.log(child.x, child.y); // 0, 0
console.log(container.x, container.y); // 50, 50
Для получения абсолютной позиции можно использовать метод getWorldTransformMatrix() или обратиться к свойствам контейнера при вычислении глобальных координат.
Положение объекта определяется не только координатами, но и
origin — точкой привязки объекта. По умолчанию
origin равен (0.5, 0.5), что означает центр
объекта. Изменение origin сдвигает визуальное отображение относительно
координат:
player.setOrigin(0, 0); // верхний левый угол объекта станет точкой (x, y)
Комбинация x, y и origin позволяет точно позиционировать объекты в игровом мире и корректно выравнивать их по сетке или другим объектам.
При создании кнопок и интерактивных объектов правильное позиционирование критично:
let button = this.add.sprite(300, 400, 'buttonTexture').setInteractive();
button.on('pointerdown', () => {
console.log('Кнопка нажата');
});
Метод setPosition удобен для динамического перемещения кнопок или интерфейсных элементов в процессе игры.
Для перемещения объектов во время игры координаты x и y можно обновлять в методе update():
update() {
player.x += 2; // движение вправо
player.y += Math.sin(this.time.now / 500) * 2; // колебания вверх-вниз
}
Использование setPosition в update() также возможно, особенно если требуется обновление обеих координат одновременно:
update() {
player.setPosition(player.x + 2, player.y);
}
Использование этих инструментов обеспечивает точное управление объектами, позволяет создавать сложные сцены и интерфейсы, а также упрощает интеграцию анимаций и взаимодействий в игре на Phaser.