DynamicBitmapText представляет собой мощный инструмент
для рендеринга текста в Phaser с возможностью динамического обновления
содержимого и применения эффектов к отдельным символам. В отличие от
обычного BitmapText, DynamicBitmapText
позволяет изменять текст без необходимости пересоздавать объект, а также
управлять каждым символом индивидуально.
Для создания текста необходимо указать сцену, координаты и используемый шрифт в формате bitmap font:
const text = this.add.dynamicBitmapText(100, 50, 'myFont', 'Привет Phaser', 32);
x, y — координаты текста на
сцене.myFont — ключ шрифта, предварительно
загруженного через this.load.bitmapFont.Привет Phaser — текст, который будет
отображён.32 — размер символов.DynamicBitmapText позволяет изменять текст без пересоздания объекта с
помощью метода setText:
text.setText('Новый текст');
Можно передавать массив строк, чтобы текст автоматически переносился на новые строки:
text.setText(['Первая строка', 'Вторая строка']);
Каждый символ DynamicBitmapText представлен отдельным объектом,
доступным через массив text.getTextBounds().glyphs или с
помощью специальных методов Phaser. Это открывает возможности для
анимации и обработки событий на уровне символов.
Примеры изменения отдельных символов:
text.setTint(0xff0000); // весь текст
text.setAlpha(0.5); // прозрачность всего текста
Для изменения конкретного символа можно использовать callback при генерации текста.
Phaser предоставляет метод setCharacterCallback, который
позволяет отслеживать появление символов и выполнять действия для
каждого из них:
text.setCharacterCallback((char, index, x, y) => {
console.log(`Символ: ${char}, индекс: ${index}, позиция: (${x}, ${y})`);
});
Параметры callback:
char — текущий символ.index — позиция символа в строке.x, y — координаты символа на
сцене.Callback может использоваться для:
Используя setCharacterCallback, можно создавать сложные
эффекты:
text.setCharacterCallback((char, index, x, y) => {
const tween = this.tweens.add({
targets: text.getChar(index),
y: y - 10,
duration: 300,
yoyo: true,
repeat: -1,
delay: index * 50
});
});
getChar(index) — возвращает объект
символа для управления его свойствами.tweens.add — добавляет анимацию для
конкретного символа.Эффект «прыгающего текста» достигается за счёт смещения координаты
y с последовательной задержкой для каждого символа.
С DynamicBitmapText можно сделать каждый символ интерактивным:
text.setCharacterCallback((char, index, x, y) => {
const glyph = text.getChar(index);
glyph.setInteractive();
glyph.on('pointerover', () => glyph.setTint(0x00ff00));
glyph.on('pointerout', () => glyph.clearTint());
});
setInteractive — делает символ
реагирующим на события мыши или касания.pointerover / pointerout
— обработка наведения и ухода курсора.Таким образом, можно создавать интерфейсы с интерактивными буквами или текстовыми элементами игры.
DynamicBitmapText оптимизирован для работы с большим количеством текста, но при активной анимации каждого символа важно учитывать нагрузку. Рекомендуется:
DynamicBitmapText можно комбинировать с спрайтами, контейнерами и таймерами:
this.time.addEvent({
delay: 100,
repeat: text.text.length - 1,
callback: () => {
const index = this.time.events.currentRepeat;
text.getChar(index).setAlpha(1);
}
});
Это позволяет создавать эффект постепенного появления текста с полной контролируемой анимацией.
setText(text) — изменение текста.setCharacterCallback(callback) —
установка callback на символы.getChar(index) — получение объекта
символа по индексу.setTint(color) — установка цвета для
текста или символа.setAlpha(value) — изменение
прозрачности текста.setInteractive() — делает символ
интерактивным.DynamicBitmapText сочетает в себе высокую производительность bitmap-шрифтов и гибкость работы с символами, что делает его незаменимым инструментом для анимаций текста, интерфейсов и игровых эффектов в Phaser.