О чем этот пример
Работа с цветами — неотъемлемая часть разработки игр. Часто цвета приходят из внешних источников, например, из палитры дизайнера, в формате HEX-строки. Вручную парсить строки типа '#FF00FF' — утомительно и чревато ошибками. Phaser предоставляет встроенный и надежный метод `Phaser.Display.Color.HexStringToColor()`, который мгновенно преобразует знакомую шестнадцатеричную запись в полноценный объект цвета для дальнейших манипуляций: изменения яркости, прозрачности или применения к игровым объектам.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
constructor ()
{
super();
}
create ()
{
const color1 = Phaser.Display.Color.HexStringToColor('#ff00ff');
console.log(color1);
const color2 = Phaser.Display.Color.HexStringToColor('#0155dd');
console.log(color2);
const color3 = Phaser.Display.Color.HexStringToColor('#03f');
console.log(color3);
const color4 = Phaser.Display.Color.HexStringToColor('#FFAAEE');
console.log(color4);
}
}
const config = {
type: Phaser.CANVAS,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Что делает `HexStringToColor`?
Это статический метод класса Phaser.Display.Color. Его задача — взять строку, представляющую цвет в HEX-формате, и вернуть объект типа Phaser.Display.Color. Этот объект содержит числовые значения красной (r), зеленой (g), синей (b) составляющих и альфа-канала (a, прозрачность), с которыми удобно работать программно.
Метод корректно обрабатывает как полную 6-символьную запись (например, '#FF00FF'), так и сокращенную 3-символьную (например, '#03F'), а также регистр символов не имеет значения.
Разбор кода примера
В примере создается сцена с единственным методом create(). Внутри него демонстрируется четыре вызова метода HexStringToColor с разными входными строками. Результат каждого вывода записывается в консоль.
create ()
{
const color1 = Phaser.Display.Color.HexStringToColor('#ff00ff');
console.log(color1);
// Остальные вызовы...
}
После запуска этого кода в консоли браузера вы увидите четыре объекта. Например, для color1 вывод будет выглядеть так:
Color { r: 255, g: 0, b: 255, a: 255, color: 16711935, rgba: 'rgba(255,0,255,1)' }
Это и есть готовый к использованию объект цвета Phaser.
Практическое применение в игре
Полученный объект цвета можно использовать напрямую или как промежуточный этап. Например, чтобы динамически установить цвет свечения (glow) для спрайта или tint (оттенок) для графического элемента.
create ()
{
// Получаем цвет из HEX-строки
const dangerColor = Phaser.Display.Color.HexStringToColor('#FF3300');
// Создаем спрайт
const player = this.add.sprite(100, 100, 'player');
// Применяем цвет в качестве tint (умножения цвета)
player.setTint(dangerColor.color); // Используем свойство .color (число)
// Или для графики
const graphics = this.add.graphics();
graphics.fillStyle(dangerColor.color, 1.0); // Тоже используем числовое значение
graphics.fillRect(200, 200, 50, 50);
}
Ключевые свойства объекта:
- `r,g,b,a` (0-255): Отдельные компоненты.
- color: Числовое представление цвета (integer), которое принимают методы вроде setTint().
- rgba: Готовая CSS-строка для использования в DOM-элементах, если это потребуется.
Особенности и валидация
Метод HexStringToColor достаточно умён. Он корректно обработает строку без решётки в начале, а в случае передачи некорректной строки (например, 'ZZZZZZ') вернёт объект, представляющий чёрный цвет (#000000). Это защищает ваш код от падений.
// Эти вызовы также сработают:
const colorA = Phaser.Display.Color.HexStringToColor('0155dd'); // Без решетки
const colorB = Phaser.Display.Color.HexStringToColor('#03f'); // Сокращенная форма
const colorC = Phaser.Display.Color.HexStringToColor('#BADINPUT'); // Станет черным
console.log(colorC); // Color { r: 0, g: 0, b: 0, a: 255, ... }
Это делает метод безопасным для использования с данными, источник которых вы не полностью контролируете.
Что попробовать дальше
Метод Phaser.Display.Color.HexStringToColor() — это ваш надёжный мост между дизайнерскими HEX-цветами и программируемым миром Phaser. Он избавляет от рутинного парсинга строк и позволяет легко внедрять динамическую палитру в игру.
**Идеи для экспериментов:**
1. Загрузите палитру цветов для уровней из JSON-файла в виде массива HEX-строк и примените её к фону и врагам.
2. Создайте эффект постепенного изменения цвета объекта (color lerping), плавно интерполируя между двумя цветами, полученными из HEX-строк.
3. Реализуйте систему подсветки (highlight) выбранного предмета в инвентаре, используя цвет из конфига игры.
