我在延迟命令方面遇到了一些麻烦。
我想显示我的徽标2秒钟,然后转到MainMenu屏幕。但它的作用是显示黑屏几秒钟,并进入MainMenu(我可以看到我的标志约1ms):
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();
}
我做错了什么?
答案 0 :(得分:2)
你不应该在sleep()
方法中使用如render()
这样长的方法,因为通常它每秒被调用30次(甚至更频繁)。
您可以为当前show()
的{{1}}方法添加计时器:
Screen
一旦显示第一个@Override
public void show() {
super.show();
float delay = 2; // seconds
Timer.schedule(new Task(){
@Override
public void run() {
game.setScreen(new MainMenuScreen(game));
}
}, delay);
}
,它就会被调用,然后在2秒后它会将Screen
更改为Screen
。
此处MainMenuScreen
为Timer
。
您还可以使用com.badlogic.gdx.utils.Timer
方法的delta
参数计算时间。有关详细信息,请查看this question。
答案 1 :(得分:1)
我假设您正在通过用户界面render()
呼叫Thread
。这意味着Thread.sleep()
将暂停执行UI Thread
2秒钟。
如果要延迟执行,一个选项是使用Handler
类。请务必阅读有关处理程序和内存泄漏的信息。