使用interval-LibGdx调度任务

时间:2017-11-15 11:13:00

标签: libgdx

我想在特定的时间间隔内在游戏中实现落叶。 游戏开始10秒后,叶片必须掉落。然后叶片必须在20秒后掉落,依此类推。

我有这种方法用于数组的落叶;

 private void updateFalls(float delta) {
    for (Leaf l : leaves)
    l.moveLeavesDown(delta);
    spawnleaves();
}

是否可以使用计时器类?是否可以在计时器内以固定间隔调用此方法? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以这样使用Timer:

Timer timer=new Timer();
timer.scheduleTask(new Timer.Task() {
            @Override
            public void run() {
                spawnLeaf();
            }
        },10,20);            //  -->  10 is your first delay and 20 is interval in sec.

我正在考虑将Leaf视为Sprite,但它可能是Image或任何其他Entity

这是我的spawnLeaf方法:

Array<Sprite> leaves=new Array<Sprite>();
private void spawnLeaf(){
    Sprite sprite=new Sprite(texture);
    sprite.setPosition(MathUtils.random(Gdx.graphics.getWidth()),Gdx.graphics.getHeight());
    leaves.add(sprite);
}

绘制并定位所有叶子的更新部分

spriteBatch.begin();

Iterator<Sprite> iter = leaves.iterator();
while (iter.hasNext()) {
    Sprite spr = iter.next();
    spr.draw(spriteBatch);
    spr.setY(spr.getY()-50f*Gdx.graphics.getDeltaTime());
    if (spr.getY()<0)
        iter.remove();
}
spriteBatch.end();

Timerclear()stop()方法,有助于删除所有计划任务并分别停止可能重新开始的计时器。