正如标题所说,我正在尝试在游戏中显示一个从 0 开始的计时器(理想情况下,我希望它位于屏幕的左上角)
我在这里有计时器的逻辑:
public class Timer {
SpriteBatch batch;
private BitmapFont font;
private float deltaTime = 0;
CharSequence str;
public Timer() {
font = new BitmapFont();
batch = new SpriteBatch();
}
public void drawTime() {
deltaTime += Gdx.graphics.getDeltaTime();
str = Float.toString(deltaTime);
font.draw(batch, str, 0, 0);
}
}
我在主类(Game)的 render() 方法中调用这个计时器,如下所示:
public void render() {
player.update();
platform1.update();
platform2.update();
batch.begin();
Gdx.gl.glClearColor(135/255f, 206/255f, 235/255f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
flag.drawS(batch);
flag.draw(batch);
player.draw(batch);
platform1.draw(batch);
platform2.draw(batch);
timer.drawTime();
batch.end();
}
}
我收到错误“SpriteBatch begin必须在绘制之前调用”,因此我尝试将timer.drawTime()方法移动到render()中的不同位置,但仍然没有成功。
有人知道可能出了什么问题吗?非常感谢任何帮助:)
最佳答案
您不应在 Timer 对象内创建 SpriteBatch()。 SpriteBatch 应该创建一次并由多个元素使用来绘制自己。您的 Timer draw() 方法应该看起来更像这样:
public void drawTime(SpriteBatch batch) {
deltaTime += Gdx.graphics.getDeltaTime();
str = Float.toString(deltaTime);
font.draw(batch, str, 0, 0);
}
您遇到的具体错误是由于您调用 batch.begin();
引起的在不同的 SpriteBatch 对象上,然后在 drawTime()
中使用的对象上.
关于java - LibGDX - 尝试在我的游戏中显示可见的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27231827/