Генерация текстур во время выполнения с текстом с использованием libgdx

Я работаю над телефонной игрой слов. Вчера я решил переключиться на OpenGL с помощью libgdx, чтобы попытаться улучшить графическую производительность и использование батареи + для таргетинга на большее количество платформ.

Способ рисования буквенных плиток на 2D-холсте состоял в том, что каждая буквенная плитка создавала для себя растровое изображение. Я мог бы:

  1. Создайте новое изменяемое растровое изображение из фонового растрового изображения.
  2. Нарисуйте букву на новом растровом изображении.
  3. Применяйте другие специфичные для плитки эффекты.
  4. Нарисуйте новое растровое изображение для каждого кадра

Какой лучший способ добиться того, чего я хочу, используя libgdx?

  1. Должен ли я принять аналогичный подход? Если так, то как? Я пытался использовать растровые изображения, но не мог понять, как нарисовать шрифт.
  2. Должен ли я создать таблицу спрайтов со всеми необходимыми плитками из AZ и просто использовать это? Немного утомительно, когда я настраиваю дизайн фона плитки.
  3. Должен ли я сделать что-то совершенно другое?

Ответ

Очевидно, что конечный код не должен загружаться из файлов каждый раз, так как это огромный удар по производительности, но вот рабочий пример кода для всех, кто пытается достичь того же результата.

    // 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());

это также должно работать

Другие вопросы по тегам