java - LibGDX - 尝试在我的游戏中显示可见的计时器

标签 java android timer bitmap libgdx

正如标题所说,我正在尝试在游戏中显示一个从 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/

相关文章:

java - 我可以在 xpath 上应用 where 条件吗?

android - 如何实现径向饼图菜单

c:计时器不允许程序完成

python - 如何设置定时器和清除定时器?

Linux sleep 定时器+取消定时器+唤醒锁屏

java - Apache NiFi : FlowFileHandlingException when transfer FlowFile in custom processor

java - 最近的 Ubuntu 16.04 中的 JNI_CreateJavaVM() 堆栈损坏

带有readObject的Java神秘EOF异常

Android Fragment 被销毁但收到 onActivityResult

java - 在Firebase上注册帐户后,用户如何在验证电子邮件之前无法登录?