О чем этот пример
Работа с геометрическими примитивами — отличный способ быстро создавать прототипы игровых элементов, интерфейсов или визуальных эффектов. В Phaser для этого есть встроенный Game Object `Triangle`. Эта статья покажет, как создавать разноцветные и обведённые треугольники, а также анимировать их свойства с помощью твинов, превращая статичную фигуру в живой, движущийся элемент вашей сцены.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
preload ()
{
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.image('bg', 'assets/skies/background1.png');
}
create ()
{
this.add.image(400, 300, 'bg');
const r1 = this.add.triangle(200, 200, 0, 148, 148, 148, 74, 0, 0x6666ff);
const r2 = this.add.triangle(400, 200, 0, 148, 148, 148, 74, 0, 0x9966ff);
r2.setStrokeStyle(4, 0xefc53f);
const r3 = this.add.triangle(600, 200, 0, 148, 148, 148, 74, 0);
r3.setStrokeStyle(2, 0x1a65ac);
const r4 = this.add.triangle(200, 400, 0, 148, 148, 148, 74, 0, 0xff6699);
const r5 = this.add.triangle(400, 400, 0, 148, 148, 148, 74, 0, 0xff33cc);
const r6 = this.add.triangle(600, 400, 0, 148, 148, 148, 74, 0, 0xff66ff);
this.tweens.add({
targets: r4,
scaleX: 0.25,
scaleY: 0.5,
yoyo: true,
repeat: -1,
ease: 'Sine.easeInOut'
});
this.tweens.add({
targets: r5,
alpha: 0.2,
yoyo: true,
repeat: -1,
ease: 'Sine.easeInOut'
});
this.tweens.add({
targets: r6,
angle: 90,
yoyo: true,
repeat: -1,
ease: 'Sine.easeInOut'
});
}
}
const config = {
type: Phaser.AUTO,
parent: 'phaser-example',
width: 800,
height: 600,
scene: Example
};
const game = new Phaser.Game(config);
Создание базового треугольника
Основной метод для добавления треугольника на сцену — this.add.triangle(). Его сигнатура требует указания координат, точек вершин и цвета заливки.
const r1 = this.add.triangle(200, 200, 0, 148, 148, 148, 74, 0, 0x6666ff);
Разберём параметры по порядку:
1. 200, 200 — координаты X и Y точки опоры (pivot point) треугольника на сцене.
2. 0, 148 — координаты X1, Y1 первой вершины относительно точки опоры.
3. 148, 148 — координаты X2, Y2 второй вершины.
4. 74, 0 — координаты X3, Y3 третьей вершины.
5. 0x6666ff — цвет заливки в шестнадцатеричном формате.
Таким образом, мы создаём треугольник с вершинами в точках (0,148), (148,148) и (74,0) относительно его центра (200,200) на сцене.
Добавление обводки (Stroke)
Phaser позволяет добавить контур к уже созданному треугольнику с помощью метода setStrokeStyle().
const r2 = this.add.triangle(400, 200, 0, 148, 148, 148, 74, 0, 0x9966ff);
r2.setStrokeStyle(4, 0xefc53f);
Метод принимает два основных аргумента:
1. Толщину обводки в пикселях (в данном случае `4`).
2. Цвет обводки (0xefc53f).
Можно создать треугольник без заливки, указав только обводку. Для этого при создании пропустите параметр цвета, а затем примените setStrokeStyle.
const r3 = this.add.triangle(600, 200, 0, 148, 148, 148, 74, 0);
r3.setStrokeStyle(2, 0x1a65ac);
Анимация с помощью твинов
Система твинов Phaser (this.tweens) позволяет плавно изменять свойства игровых объектов. В примере анимируются три разных свойства треугольника.
**Масштабирование:** Твин изменяет масштаб по осям X и Y, создавая эффект "пульсации".
this.tweens.add({
targets: r4,
scaleX: 0.25,
scaleY: 0.5,
yoyo: true,
repeat: -1,
ease: 'Sine.easeInOut'
});
**Прозрачность:** Анимация свойства alpha делает треугольник полупрозрачным и обратно.
this.tweens.add({
targets: r5,
alpha: 0.2,
yoyo: true,
repeat: -1,
ease: 'Sine.easeInOut'
});
**Вращение:** Изменение угла angle поворачивает фигуру.
this.tweens.add({
targets: r6,
angle: 90,
yoyo: true,
repeat: -1,
ease: 'Sine.easeInOut'
});
Ключевые параметры твина:
- targets: объект или массив объектов для анимации.
- yoyo: true: твин будет проигрываться в обратном направлении после завершения.
- repeat: -1: анимация повторяется бесконечно.
- ease: функция плавности, определяющая характер движения.
Практическое применение в играх
Треугольники — не просто демонстрация API. Их можно использовать как:
* **Указатели и маркеры:** Острые треугольники идеальны для курсоров прицела, стрелок навигации или меток на карте. * **Прототипы рельефа:** Быстрое создание гор, холмов или пиков для фона. * **Части сложных фигур:** Комбинируя несколько треугольников, можно собирать ромбы, шестиугольники или произвольные полигоны для коллайдеров. * **Визуальные эффекты:** Анимированные треугольники могут стать частью силового поля, магического щита или области поражения.
Поскольку Triangle наследуется от Phaser.GameObjects.Shape, он обладает всеми стандартными свойствами: позиция (`x,y), масштаб (scaleX,scaleY), угол поворота (angle), видимость (visible) и глубина (depth`). Это позволяет легко интегрировать его в игровую логику.
Что попробовать дальше
Как видите, Phaser предоставляет простой и мощный инструмент для работы с треугольниками через this.add.triangle(). Комбинируя заливку, обводку и твины, вы можете создавать как статичный декор, так и динамичные интерактивные элементы. Для экспериментов попробуйте: анимировать не одну, а несколько вершин треугольника, используя пользовательские данные; создать композицию из множества треугольников для партиклового эффекта; или привязать физическое тело к форме треугольника для создания нестандартных коллайдеров.
