使用libgdx在运行时使用文本生成纹理

时间:2014-02-20 12:43:17

标签: java opengl bitmap libgdx pixmap

我正在开发手机文字游戏。昨天我决定使用libgdx切换到OpenGL来尝试提高图形性能和电池使用率+以更多平台为目标。

字母图块绘制在2D画布上的工作方式是每个字母图块都会为自己创建一个位图。我会:

  1. 从背景位图创建一个新的可变位图。
  2. 在新位图上绘制字母。
  3. 应用其他特定于瓷砖的效果。
  4. 为每个帧绘制新的位图
  5. 使用libgdx实现我想要的最佳方式是什么?

    1. 我应该采用类似的方法吗?如果是这样,怎么样?我尝试使用pixmaps,但无法弄清楚如何绘制字体。
    2. 我应该用A-Z创建一个包含所有必需图块的spritesheet并使用它吗?当我调整平铺背景的设计时,有点单调乏味。
    3. 我应该做些完全不同的事吗?
    4. 答案

      显然最终的代码不应该每次都从文件中加载,因为这是一个巨大的性能损失,但这里是其他任何试图获得相同结果的人的示例代码。

          // 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 个答案:

答案 0 :(得分:3)

Quote:您可以创建BitmapFontData个实例并使用BitmapFontData.getImagePath()加载包含Pixmap的{​​{1}}。然后,您可以使用glyphs获取BitmapFontData.getGlyph中特定字形的位置,您可以使用Pixmap来执行您想要执行的操作。资料来源:libgdx Issue 691: Draw BitmapFont to Pixmap/Texture


您将获得Pixmap.drawPixmap()的路径并使用Filehandle创建一个新的Pixmap到此路径:

  

Pixmap(FileHandle文件)

     

从给定文件创建一个新的Pixmap实例。

来源:PixmapAPI

使用BitmapFontData作为文件句柄,你得到了包含所有Glyps的像素图。

Gdx.files.internal(pathfromBitmapFontData)

尝试一下它的内部!可能不是我不知道的内部文件


Pixmap p = new Pixmap(Gdx.files.internal(myBitmapFontData.getImagePath()))

这也应该有用