Java Thread.sleep()无法正常工作

时间:2015-03-08 13:54:01

标签: java android libgdx

我在延迟命令方面遇到了一些麻烦。

我想显示我的徽标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();
}

我做错了什么?

2 个答案:

答案 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

此处MainMenuScreenTimer

您还可以使用com.badlogic.gdx.utils.Timer方法的delta参数计算时间。有关详细信息,请查看this question

答案 1 :(得分:1)

我假设您正在通过用户界面render()呼叫Thread。这意味着Thread.sleep()将暂停执行UI Thread 2秒钟。

如果要延迟执行,一个选项是使用Handler类。请务必阅读有关处理程序和内存泄漏的信息。