在libGDX中的TrueType字体
有谁知道如何在libGDX中使用TTF字体? 我环顾四周,看到有关StbTrueTypeFont的事情,但它似乎并没有在最新版本。
编辑:我发现StbTrueType字体的东西,jar文件位于扩展目录。 我已经添加到我的项目。 现在我只需要弄清楚如何使用它。 任何例子?
是的,你肯定需要添加gdx-stb-truetype
jar子到你的项目中,正如你在编辑中所述。 这里是你将如何使用它,非常直接…
首先,你需要声明你的BitmapFont
和你将使用的字符…
BitmapFont font; public static final String FONT_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][_!$%#@|\\/?-+=()*&.;,{}\"´`'<>";
那么你需要创build字体…
font = TrueTypeFontFactory.createBitmapFont(Gdx.files.internal("font.ttf"), FONT_CHARACTERS, 12.5f, 7.5f, 1.0f, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); font.setColor(1f, 0f, 0f, 1f);
你可以使用你传递给createBitmapFont()
的参数createBitmapFont()
,你会看到他们做了什么。
然后渲染字体,你会像往常一样做…
batch.begin(); font.draw(font, "This is some text", 10, 10); batch.end();
使用gdx-freetype扩展:
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile); BitmapFont font15 = generator.generateData(15); BitmapFont font22 = generator.generateData(22); generator.dispose();
“要使用gdx-freetype,请抓住最近的夜晚,将gdx-freetype.jar
和gdx-freetype-natives.jar
链接到您的桌面项目,将gdx-freetype.jar
链接到您的Android项目,并复制armeabi/libgdx-freetype.so
和armeabi-v7a/libgdx-freetype.so
文件添加到您的Android项目的libs/
文件夹中,就像使用libgdx.so
文件一样。
来源: http : //www.badlogicgames.com/wordpress/? p = 2300
研究了很多,发现了这个工作方法:
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("myfont.ttf")); FreeTypeFontParameter parameter = new FreeTypeFontParameter(); parameter.size = 12; // font size BitmapFont font12 = generator.generateFont(parameter); generator.dispose(); // avoid memory leaks, important
使用这个,如果你尝试上面的答案失败, libGDX Freetype维基引用。
这是一个S4克隆手机:松林是一个下载的字体,资产文件夹。 请参阅下面的文件夹结构。
import android.util.Log; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; public class Game implements ApplicationListener { private SpriteBatch mSpriteBatch; private Texture textureBackground; private BitmapFont mBitmapFont; public void create() { Gdx.graphics.setContinuousRendering(false); Gdx.graphics.requestRendering(); mSpriteBatch = new SpriteBatch(); Texture.setEnforcePotImages(false); textureBackground = new Texture(Gdx.files.internal("background.jpg")); FileHandle fontFile = Gdx.files.internal("Pinewood.ttf"); FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile); mBitmapFont = generator.generateFont(150); generator.dispose(); mBitmapFont.setColor(0.9f, 0.5f, 0.5f, 1); Log.e("Game", "mBitmapFont.getScaleX() : "+mBitmapFont.getScaleX() + ", mBitmapFont.getScaleY() "+mBitmapFont.getScaleY()); } public void render() { Log.e("Game", "render()"); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // This cryptic line clears the screen. mSpriteBatch.begin(); // Drawing goes here! mSpriteBatch.draw(textureBackground, 0, 0); mBitmapFont.draw(mSpriteBatch, "FPS:"+Gdx.graphics.getFramesPerSecond(), 110, 260); mSpriteBatch.end(); } public void resize(int width, int height) { } public void pause() { } public void resume() { } public void dispose() { } }