我正在尝试在我的程序中添加用于调试目的的文本。我在主类中调用播放器 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);
}
但是,当我运行该程序时,我只是得到我的正常屏幕,根本没有文本。我似乎无法弄清楚为什么这不起作用。任何帮助都非常感谢。
您发布的代码看起来没有任何问题,所以这里有一些想法;
默认BitmapFont
是 15pt,如果以 15px 高度绘制,那么如果您强制游戏达到高分辨率(如全高清),则它可能非常小。我目前的项目是全高清,我使用的字体看起来正好是 45px,所以你可以尝试将你的字体缩放 3 或 4 倍。例如,在初始化字体后使用它;
bitmapFont.getData().setScale(3);
您的Camera
也应该具有虚拟/视口尺寸,因此,如果您要强制使用特定分辨率,则应传入虚拟尺寸。
正如@Tenfour04所建议的,你应该尽量避免使用同一字体的多个实例,所以不要在Entity
类中初始化你的字体,而是在你的主游戏中初始化它,并通过Entity
构造函数传递它。我看不出这将如何解决您的问题,因为这纯粹是为了性能。
我犯了一个非常简单的错误,但从我发布的代码量来看,它很容易被遗漏。在我放的线上
batch.setTransformMatrix(cam.combined);
它应该替换为
batch.setProjectionMatrix(cam.combined);
然后所有错误都消失了,对不起,我不知道为什么我花了这么长时间才弄清楚。感谢所有的帮助!