2D-графика

Xtreme3D

Урок 12
2D-графика

Уровень: средний
Версия Xtreme3D: 3.0.x
Автор урока: Gecko

Xtreme3D позволяет рисовать не только трехмерные объекты, но и двумерные - экранный текст и экранные спрайты. Экранный текст отображается поверх отрендеренной картинки и применяется для представления некоей текстовой информации в игре: количество жизней или патронов, различных сообщений, отладочных данных и пр. Экранные спрайты - это просто двумерные картинки, которые можно использовать для отображения элементов интерфейса - прицел, иконки, шкала энергии и т.д. Также с их помощью можно сделать игровое меню с фоном - это более предпочтительно, чем создавать меню через встроенную графику Game Maker, так как в этом случае вы можете рисовать меню поверх 3D-сцены, что выглядит очень стильно.

Объекты текста используют специальные шрифтовые объекты, хранящие изображения текстовых символов - букв, цифр и знаков препинания. Эти изображения можно задать двумя способами: сгенерировать из системных векторных шрифтов Windows или загрузить из файла. Второе более предпочтительно, так как вы можете нарисовать в графическом редакторе шрифт любого цвета и сложности, с любыми символами и на любом языке, в то время как поддержка системных шрифтов сильно ограничена (поддерживается только латиница). Но у векторных шрифтов есть одно неоспоримое преимущество - масштабируемость без потери качества: то есть, можно из одного и того же системного шрифта сгенерировать символы разного размера.

Код для создания шрифта и экранного текста выглядит следующим образом:

font = WindowsBitmapfontCreate('Arial', 14, 32, 95);
text = HUDTextCreate(font, 'Hello, World!', global.front);

Обратите внимание, что мы указываем корневой объект global.front в качестве родителя объекту text - это гарантирует, что текст будет отрисован после трехмерной сцены.

Созданный текст можно видоизменять - задать ему цвет и прозрачность, а также позицию и поворот:

HUDTextSetColor(text, c_red, 0.5);
ObjectSetPosition(text, 100, 100, 0);
HUDTextSetRotation(text, 30.0);

У шрифтов типа WindowsBitmapfont есть серьезный недостаток: он поддерживает только кодировку ANSI. Это означает, что в одном приложении нельзя использовать символы нескольких разных алфавитов. Для решения этой проблемы в Xtreme3D была добавлена поддержка библиотеки FreeType и кодировки UTF-8, которая позволяет выводить любые символы без ограничений. При помощи FreeType вы можете загружать TTF-шрифты из файлов, что очень удобно - вам не придется волноваться по поводу того, установлен ли нужный шрифт в системе пользователя: все нужные шрифты могут поставляться вместе с игрой.

Создание шрифта и экранного текста при помощи FreeType выглядит следующим образом:

font = TTFontCreate('data/font.ttf', 14);
text = HUDTextCreate(font, 'Hello, World!', global.front);

Текстовая строка, которую вы передаете в функцию HUDTextCreate, должна быть закодирована в UTF-8. К сожалению, Game Maker 8 не поддерживает UTF-8 во встроенном редакторе кода, поэтому текст, содержащий символы национальных алфавитов, следует либо загружать из файла функцией TextRead, либо конвертировать функцией TextConvertANSIToUTF8.
Для использования функции TTFontCreate поместите в папку с игрой библиотеку freetype.dll (ищите ее в SDK).