Phaser — мощная библиотека для создания 2D-игр на JavaScript, предоставляющая удобные инструменты для работы с графикой и текстом. Управление многострочным текстом является одной из ключевых задач при создании интерфейсов, диалогов, инструкций и HUD.
Для отображения текста в Phaser используется объект
Phaser.GameObjects.Text. Многострочный текст создаётся
простым добавлением символов перевода строки \n в строку
или массив строк.
const text = this.add.text(100, 50, 'Первая строка\nВторая строка\nТретья строка', {
fontFamily: 'Arial',
fontSize: '24px',
color: '#ffffff',
align: 'left',
wordWrap: { width: 400, useAdvancedWrap: true }
});
Ключевые моменты:
\n — стандартный символ перевода
строки.wordWrap — объект для автоматического
переноса текста при достижении заданной ширины.align — выравнивание текста
(left, center, right).Для динамического текста, когда длина строки заранее неизвестна,
используется свойство wordWrap. Оно позволяет Phaser
автоматически переносить слова на новую строку при превышении заданной
ширины.
const dynamicText = this.add.text(50, 100, 'Очень длинный текст, который нужно перенести автоматически на следующую строку при достижении заданной ширины', {
fontFamily: 'Verdana',
fontSize: '20px',
color: '#ffcc00',
wordWrap: { width: 300 }
});
Особенности:
width — максимальная ширина блока текста.useAdvancedWrap — более сложный алгоритм переноса,
учитывающий пробелы и знаки препинания.Phaser поддерживает стилизацию текста через объекты конфигурации. Для многострочного текста можно комбинировать стили, задавая шрифт, цвет и выравнивание.
const styledText = this.add.text(50, 200, 'Заголовок\nПодзаголовок\nТекст параграфа', {
fontFamily: 'Georgia',
fontSize: '22px',
color: '#ffffff',
align: 'center',
lineSpacing: 10
});
lineSpacing — вертикальный отступ между
строками, задающий удобочитаемость текста.
Phaser позволяет добавлять интерактивность к текстовым объектам, что полезно для диалогов или меню.
const menuOption = this.add.text(100, 300, 'Начать игру\nНастройки\nВыход', {
fontFamily: 'Tahoma',
fontSize: '26px',
color: '#00ff00',
align: 'left'
}).setInteractive();
menuOption.on('pointerover', () => {
menuOption.setStyle({ fill: '#ff0000' });
});
menuOption.on('pointerout', () => {
menuOption.setStyle({ fill: '#00ff00' });
});
Преимущества:
pointerover и pointerout позволяют
реализовать подсветку выбранной строки.Текст можно менять в процессе игры через метод setText.
Это удобно для диалогов, очков или сообщений об ошибках.
let scoreText = this.add.text(20, 20, 'Очки: 0', { fontSize: '20px', fill: '#ffffff' });
let score = 0;
// Обновление текста
score += 10;
scoreText.setText(`Очки: ${score}\nЛучший результат: 100`);
Особенности:
setText принимает строку или массив строк.Для интерфейсов с фиксированными размерами блока текста применяется
свойство maxLines. Это предотвращает выход текста за
пределы заданного блока.
const limitedText = this.add.text(50, 400, 'Очень длинный текст, который не должен выходить за пределы блока', {
fontFamily: 'Arial',
fontSize: '18px',
color: '#ffffff',
wordWrap: { width: 250 },
maxLines: 3
});
Если количество строк превышает maxLines, лишние строки
обрезаются.
Многострочный текст можно помещать в контейнеры, применять маски и анимации. Это удобно для создания скроллируемых диалоговых окон.
const textContainer = this.add.container(50, 50);
const dialogueText = this.add.text(0, 0, 'Длинный текст с переносами строк для диалога', { fontSize: '20px', color: '#ffffff', wordWrap: { width: 300 } });
textContainer.add(dialogueText);
// Маска для ограничения видимой области
const shape = this.add.rectangle(50, 50, 300, 100, 0x000000).setOrigin(0);
const mask = shape.createBitmapMask();
textContainer.setMask(mask);
Такой подход позволяет:
Многострочный текст в Phaser сочетает гибкость форматирования, автоматический перенос и поддержку интерактивности, что делает его удобным инструментом для создания игровых интерфейсов и диалоговых систем.