使用deltatime的LibGdx更新不准确

时间:2017-07-11 19:13:32

标签: java android libgdx

我是创造游戏的新手。 我有几个从屏幕的顶部到底部移动的盒子,我需要在它们之间留出1个单位的距离。 除了距离不精确之外,每件事都很好,我认为deltatime会导致这个问题 这是我移动盒子的方式:     objX - = deltatime * speed;

更新

time += deltatime :if(time >= 3.0f) spawn

我正在使用libgdx

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式安排任务:

Array<Sprite> sprites;
Texture texture;
SpriteBatch batch;
float speed=35;

@Override
public void create() {

   sprites=new Array<Sprite>();
   texture=new Texture("badlogic.jpg");
   batch=new SpriteBatch();

   Timer.instance().scheduleTask(new Timer.Task() {
            @Override
            public void run() {
                spawn();
            }
        },1,2);
}

private void spawn(){
    Sprite sprite=new Sprite(texture);
    sprite.setSize(50,50);
    sprite.setPosition(Gdx.graphics.getWidth()/2,0);
    sprites.add(sprite);
}

@Override
public void render() {

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

    float delta=Gdx.graphics.getDeltaTime();
    batch.begin();
    for (Sprite sprite:sprites){
        sprite.setY(sprite.getY()+delta*speed);
        sprite.draw(batch);
    }
    batch.end();
}

答案 1 :(得分:0)

经过大量的挣扎,我提出了一个想法 而不是移动框并通过deltatime生成它们,使框静止并将相机移到它们上面!

所以我只是在这里移动相机

    public void render(float delta) {
    posCameraDesired.y += 2000.0f * Gdx.graphics.getDeltaTime();
    guiCam.position.lerp(posCameraDesired, 0.1f);
    SemiRender();
}

我有静态Y,我会在每次产卵后更新    lastY = 10 + lastY + ((width / 4) / 2) * 3; 以及在通过viewport时回收它们的一些其他逻辑。 每个人都很开心!