我在使用延迟命令时遇到一些问题。
我想显示我的 Logo 2 秒钟,然后转到主菜单屏幕。但它的作用是显示黑屏几秒钟,然后转到主菜单(我可以看到我的 Logo 大约 1 毫秒):
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0.2f, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
game.batch.setProjectionMatrix(camera.combined);
game.batch.begin();
game.batch.draw(PGSImage, 0, 0);
game.batch.end();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
game.setScreen(new MainMenuScreen(game));
dispose();
}
我做错了什么?
最佳答案
您不应该在 render()
方法中使用诸如 sleep()
之类的长方法,因为通常每秒调用 30 次(甚至更频繁)。
您可以将计时器添加到当前Screen
的show()
方法中:
@Override
public void show() {
super.show();
float delay = 2; // seconds
Timer.schedule(new Task(){
@Override
public void run() {
game.setScreen(new MainMenuScreen(game));
}
}, delay);
}
当您的第一个 Screen
显示时,它将被调用,然后它将在 2 秒后将您的 Screen
更改为 MainMenuScreen
。
这里Timer
是com.badlogic.gdx.utils.Timer
。
您还可以使用 render()
方法的 delta
参数来计算时间。看看this question了解更多详情。
关于Java Thread.sleep() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28927206/