所以我正在创建一个2D游戏,目前正在按照教程添加自定义字体到屏幕上。
我所做的工作如下所示。我只复制了与此主题相关的部分代码。
public class GameScreen implements Screen, InputProcessor {
private SpriteBatch batch = null;
private OrthographicCamera mCamera = null;
private BitmapFont scoreFont = null;
private int score = 0;
@Override
public void show() {
mCamera = new OrthographicCamera(1920, 1080);
font_texture = new Texture(Gdx.files.internal("font.png"));
font_texture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);
scoreFont = new BitmapFont(Gdx.files.internal("font.fnt"), new TextureRegion(font_texture), false);
batch = new SpriteBatch();
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(mCamera.combined);
batch.begin();
this.scoreFont.draw(batch, "" + score, 100, 220);
batch.end();
}
问题是,文字没有显示。这可能是过时的方法还是什么?
答案 0 :(得分:1)
如果您想在屏幕上绘制字体,那么您有很多方法可以做到这一点:
A。使用.fnt
格式
1- Hiero您可以使用Right Click->Run As->Java Application
从桌面项目运行它,然后选择Hiero
,然后在字体上创建所需的任何样式,然后将其另存为.fnt
。此工具将自动保存图像,然后将这些文件移动到您的Android项目到资源文件夹,然后使用以下简单代码调用字体:
BitmapFont bFont = new BitmapFont(Gdx.files.internal("fonts/___.fnt"); // initialization
bfont.draw(batch, "" + score, 100, 220); // in render
2- Shobox是一款免费的基于Adobe Air的应用程序,适用于Windows和Mac OSX,带有游戏和ui相关工具。每个工具都使用拖放 - 或clipbord交互来实现快速工作流程。
3- Glyph Designer是一款功能强大的位图字体设计器,专为OS X Yosemite重新设计,可充分利用最新功能。使用高度可配置的效果,可定义的背景,自定义图像,可编辑的字形指标等创建精美的设计。通过智能缩放和全屏支持,充分利用您的屏幕。在多个平台上定位数百个设备,支持超过15个框架。使用GDCL简化本地化。
4- Glyphite是一个基于浏览器的Bitmap字体生成器,可以在几秒钟内创建详细的Bitmap字体并以大多数主要格式导出它们。
B。使用.ttf
格式
1-首先,您必须在项目中插入FreeType lib,然后才能使用以下简单代码:
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/___.ttf"));
FreeTypeFontParameter parameter = new FreeTypeFontParameter();
parameter.size = 12;
BitmapFont font12 = generator.generateFont(parameter); // font size 12 pixels
generator.dispose(); // don't forget to dispose to avoid memory leaks!
scene2d是很好的lib,很容易处理具有很酷层次结构的Actors:
//initialization
LabelStyle style = LabelStyle(bFont, Color.BLUE);
Label label = new Label("", style);
stage.addActor(label);
//in render
stage.act();
stage.draw();
label.setText("" + score);