如何在LIBGDX中设置计时器

时间:2016-05-11 12:43:34

标签: android timer libgdx

我希望每秒都能更改我的气球位置(随机)。我写了这段代码:

public void render() {

    int initialDelay = 1000; // start after 1 seconds
    int period = 1000;        // repeat every 1 seconds
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        public void run() {
            rand_x = (r.nextInt(1840));
            rand_y = (r.nextInt(1000));
            balloon.x = rand_x;
            balloon.y = rand_y;
            System.out.println("deneme");
        }
    };
    timer.schedule(task, initialDelay, period);

    Gdx.gl.glClearColor(56, 143, 189, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();
    batch.setProjectionMatrix(camera.combined);

    batch.begin();
    batch.draw(balloon, balloon_rec.x, balloon_rec.y);
    batch.end();

}

initialDelay正在运行。当我运行程序时,Balloon的位置在1秒后发生变化。但是时期不起作用。问题在哪里?

1 个答案:

答案 0 :(得分:4)

不要在render方法中触发线程,它不安全,可能导致线程泄漏,许多其他问题并且难以维护代码,处理时间使用变量每次调用render时添加delta时间,当这个变量优越时,1.0f表示已经过了一秒,你的代码将是这样的:

private float timeSeconds = 0f;
private float period = 1f;

public void render() {
    //Execute handleEvent each 1 second
    timeSeconds +=Gdx.graphics.getRawDeltaTime();
    if(timeSeconds > period){
        timeSeconds-=period;
        handleEvent();
    }
    Gdx.gl.glClearColor(56, 143, 189, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();
    batch.setProjectionMatrix(camera.combined);

    batch.begin();
    batch.draw(balloon, balloon_rec.x, balloon_rec.y);
    batch.end();

}

public void handleEvent() {
    rand_x = (r.nextInt(1840));
    rand_y = (r.nextInt(1000));
    balloon.x = rand_x;
    balloon.y = rand_y;
    System.out.println("deneme");
}