Генерация текстур во время выполнения с текстом с использованием libgdx
Я работаю над телефонной игрой слов. Вчера я решил переключиться на OpenGL с помощью libgdx, чтобы попытаться улучшить графическую производительность и использование батареи + для таргетинга на большее количество платформ.
Способ рисования буквенных плиток на 2D-холсте состоял в том, что каждая буквенная плитка создавала для себя растровое изображение. Я мог бы:
- Создайте новое изменяемое растровое изображение из фонового растрового изображения.
- Нарисуйте букву на новом растровом изображении.
- Применяйте другие специфичные для плитки эффекты.
- Нарисуйте новое растровое изображение для каждого кадра
Какой лучший способ добиться того, чего я хочу, используя libgdx?
- Должен ли я принять аналогичный подход? Если так, то как? Я пытался использовать растровые изображения, но не мог понять, как нарисовать шрифт.
- Должен ли я создать таблицу спрайтов со всеми необходимыми плитками из AZ и просто использовать это? Немного утомительно, когда я настраиваю дизайн фона плитки.
- Должен ли я сделать что-то совершенно другое?
Ответ
Очевидно, что конечный код не должен загружаться из файлов каждый раз, так как это огромный удар по производительности, но вот рабочий пример кода для всех, кто пытается достичь того же результата.
// load the background into a pixmap
Pixmap tile = new Pixmap(Gdx.files.getFileHandle(
"someFile.png", FileType.Internal));
// load the font
FileHandle handle = Gdx.files.getFileHandle("someFont.fnt",
FileType.Internal);
BitmapFont font = new BitmapFont(handle);
// get the glypth info
BitmapFontData data = font.getData();
Pixmap fontPixmap = new Pixmap(Gdx.files.internal(data.imagePaths[0]));
Glyph glyph = data.getGlyph(getLetterToDraw().charAt(0));
// draw the character onto our base pixmap
tile.drawPixmap(fontPixmap, (TILE_WIDTH - glyph.width) / 2, (TILE_HEIGHT - glyph.height) / 2,
glyph.srcX, glyph.srcY, glyph.width, glyph.height);
// save this as a new texture
texture = new Texture(tile);
1 ответ
Цитата: Вы можете создать BitmapFontData
экземпляр и использование BitmapFontData.getImagePath()
загрузить Pixmap
содержащий glyphs
, Вы можете использовать BitmapFontData.getGlyph
чтобы получить местоположение конкретного глифа в Pixmap
, который вы можете использовать с Pixmap.drawPixmap()
делать то, что ты хочешь делать. Источник: libgdx Выпуск 691. Рисование растрового шрифта в Pixmap/Texture
Вы получаете путь к BitmapFontData
и создайте новый Pixmap с Filehandle к пути с этим:
Pixmap (файл FileHandle)
Создает новый экземпляр Pixmap из данного файла.
Источник: PixmapAPI
использование Gdx.files.internal(pathfromBitmapFontData)
как дескриптор файла, и вы получили растровое изображение со всеми Glyps внутри.
Pixmap p = new Pixmap(Gdx.files.internal(myBitmapFontData.getImagePath()))
попробуйте, если это внутреннее! Может быть, не внутренний файл, я не знаю его
Pixmap p = new Pixmap(myFont.getData().getFontFile());
это также должно работать