问题
I'm working on a phone word game. Yesterday I decided to switch to OpenGL using libgdx to try and improve graphics performance and battery usage + to target more platforms.
The way letter tile drawing was working on a 2D canvas was each letter tile would create a bitmap for itself. I would:
- Create a new mutable bitmap from the background bitmap.
- Draw on the letter on the new bitmap.
- Apply other tile specific effects.
- Draw the new bitmap for each frame
What's the best way for me to achieve what I want using libgdx?
- Should I adopt a similar approach? If so, how? I tried using pixmaps but couldn't work out how to draw the font.
- Should I create a spritesheet with all the required tiles from A-Z and just use that? A bit tedious when I tweak the design of the tile background.
- Should I do something totally different?
Answer
Obviously the final code shouldn't load from the files every time, as this is a massive performance hit, but here's working sample code for anyone else who is trying to achieve the same result.
// 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:
Quote: You can create a BitmapFontData
instance and use BitmapFontData.getImagePath()
to load a Pixmap
containing the glyphs
. You can then use BitmapFontData.getGlyph
to get the location of a specific glyph in the Pixmap
, which you can use with Pixmap.drawPixmap()
to do what you want to do. Source: libgdx Issue 691: Draw BitmapFont to Pixmap/Texture
You get the path to the BitmapFontData
and create a new Pixmap with the Filehandle to the path with this:
Pixmap(FileHandle file)
Creates a new Pixmap instance from the given file.
Source: PixmapAPI
Use Gdx.files.internal(pathfromBitmapFontData)
as filehandle and you got the pixmap with all Glyps inside.
Pixmap p = new Pixmap(Gdx.files.internal(myBitmapFontData.getImagePath()))
try out if its an internal! Meight be not an internal file i dont know it
Pixmap p = new Pixmap(myFont.getData().getFontFile());
this should also work
来源:https://stackoverflow.com/questions/21908171/generating-textures-at-runtime-with-text-using-libgdx