正如标题所示我试图在我的游戏中显示一个从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);
}
}
我在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必须在draw之前调用”,所以我尝试在render()中的不同位置移动timer.drawTime()方法,但仍然没有运气。
任何人都知道什么可能是错的?任何帮助都非常感谢:)
答案 0 :(得分:3)
您不应在Timer对象中创建SpriteBatch()。 SpriteBatch应该创建一次,并由多个元素用于绘制自己。你的Timer draw()方法应该更像这样:
public void drawTime(SpriteBatch batch) {
deltaTime += Gdx.graphics.getDeltaTime();
str = Float.toString(deltaTime);
font.draw(batch, str, 0, 0);
}
您遇到的具体错误是由于您在另一个SpriteBatch对象上调用batch.begin();
而在drawTime()
中使用的那个。