В библиотеке Phaser объекты сцены, такие как спрайты, изображения или группы, имеют свойства angle и rotation, отвечающие за их поворот. Хотя оба свойства изменяют ориентацию объекта, между ними существует ключевое различие в единицах измерения и поведении.
anglelet sprite = this.add.sprite(400, 300, 'player');
sprite.angle = 45; // поворот на 45 градусов по часовой стрелке
sprite.angle += 15; // добавление ещё 15 градусов
Особенности:
angle всегда автоматически нормализуется в диапазоне от
-180 до 180 градусов.rotationangle: положительные значения — по часовой стрелке.let sprite = this.add.sprite(400, 300, 'player');
sprite.rotation = Math.PI / 4; // поворот на 45 градусов
sprite.rotation += Math.PI / 6; // добавление ещё 30 градусов
Особенности:
Math.sin, Math.cos), которые используют
радианы.rotation может принимать любое значение без
автоматической нормализации, что позволяет делать плавные непрерывные
анимации вращения.angle и
rotationСвойства связаны формулой:
[ = ]
и обратно:
[ = ]
Это означает, что изменение одного свойства автоматически отражается на другом. Например:
sprite.angle = 90;
console.log(sprite.rotation); // 1.5707963267948966 радиан (π/2)
По умолчанию вращение происходит вокруг центра объекта. Phaser позволяет изменять точку вращения с помощью свойства origin:
sprite.setOrigin(0, 0); // вращение вокруг верхнего левого угла
sprite.setOrigin(0.5, 0.5); // вращение вокруг центра (по умолчанию)
origin важно для создания эффекта вращения
вокруг нестандартной точки, например для стрелок или вращающихся
платформ.Phaser поддерживает анимацию свойств с помощью
tweens, включая angle и
rotation:
this.tweens.add({
targets: sprite,
angle: 360,
duration: 2000,
repeat: -1
});
rotation формула аналогична:this.tweens.add({
targets: sprite,
rotation: Math.PI * 2,
duration: 2000,
repeat: -1
});
Если объект участвует в системе физики Phaser (Arcade, Matter), важно учитывать:
angle влияет только на
визуальное отображение. Для физического вращения используется
body.rotation.body.setAngle() или
body.setAngularVelocity():sprite.body.setAngle(Math.PI / 4);
sprite.body.setAngularVelocity(0.05); // постоянная скорость вращения
angle и
rotationДля движения в направлении угла используют тригонометрию:
let speed = 200;
sprite.x += Math.cos(sprite.rotation) * speed * delta;
sprite.y += Math.sin(sprite.rotation) * speed * delta;
rotation в радианах, так как функции
Math.cos и Math.sin ожидают радианы.angle необходимо предварительно преобразовать
градусы в радианы:let rad = Phaser.Math.DegToRad(sprite.angle);
sprite.x += Math.cos(rad) * speed * delta;
sprite.y += Math.sin(rad) * speed * delta;
angle.rotation.origin критично для нестандартных точек
вращения.Эти инструменты позволяют точно контролировать ориентацию объектов в 2D-сцене, комбинировать визуальные эффекты и физическое поведение, создавая динамичные и отзывчивые игры на Phaser.