我正在尝试在程序中添加用于调试目的的文本。我在主类中调用了这样的调试器debugDraw方法:
public void create () {
//Initialize essentials
cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.setToOrtho(false);
rend = new ShapeRenderer();
rend.setAutoShapeType(true);
batch = new SpriteBatch();
// Initialize Entities
player = new Player(new Vector2(100, 100), new Vector2(100,100));
enemy = new Enemy(new Vector2(100, 100), new Vector2(100,10));
}
@Override
public void render () {
//Update player
player.update();
//Update camera then set matrix of batch
cam.update();
batch.setTransformMatrix(cam.combined);
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// ShapeRenderer begin
rend.begin();
player.render(rend);
enemy.render(rend);
rend.end();
// ShapeRenderer end
// SpriteBatch begin
batch.begin();
player.renderDebugText(batch);
batch.end();
// SpriteBatch end
}
这是实体类,它是播放器的父类:
public Entity(Vector2 coords, Vector2 dims){
//Assign constructors
position = coords;
dim = dims;
//For debugging purposes of all entities
debugText = new BitmapFont();
debugText.setColor(Color.WHITE);
}
public void renderDebugText(SpriteBatch batch){
debugText.draw(batch, "Vel.x: " + vel.x, 100, 100);
}
然而,当我运行该程序时,我只是得到了我的普通屏幕,没有任何文字。我似乎无法弄清楚为什么这不起作用。非常感谢任何帮助。
答案 0 :(得分:1)
您发布的代码没有立即出错,所以这里有一些想法;
默认BitmapFont
是15pt,如果这是在15px高度绘制的话,那么如果你强制你的游戏达到高分辨率(如全高清),它可能会非常小。我目前的项目是全高清,我使用的字体看起来恰好是45px,所以你可以尝试按比例缩放3或4倍。在初始化字体后使用它;
bitmapFont.getData().setScale(3);
您的Camera
也应该具有虚拟/视口尺寸,因此如果您强制使用特定分辨率,则应该传入虚拟尺寸。
正如@ Tenfour04建议的那样,你应该尽量避免使用相同字体的多个实例,所以不要在Entity
类中初始化你的字体,而是在主游戏中初始化它并将其传递给{{1构造函数。我无法看到这将如何解决您的问题,因为这纯粹是为了表现。
答案 1 :(得分:0)
我犯了一个非常简单的错误,但是从我发布的代码中,很容易错过。在我放的行
batch.setTransformMatrix(cam.combined);
应该替换为
batch.setProjectionMatrix(cam.combined);
然后所有的错误消失了,对不起,我不知道为什么花了这么长时间才弄明白。谢谢你的帮助!