Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用deltatime进行的LibGdx更新不精确_Java_Android_Libgdx - Fatal编程技术网

Java 使用deltatime进行的LibGdx更新不精确

Java 使用deltatime进行的LibGdx更新不精确,java,android,libgdx,Java,Android,Libgdx,我是一个新的游戏创作者。 我有几个盒子可以从屏幕的顶部移动到底部,我需要在它们之间留出1个单位的距离。 除了距离不精确外,其他一切都很好,我认为deltatime导致了这个问题 这是我移动箱子的方式: objX-=延迟时间*速度 更新 time += deltatime :if(time >= 3.0f) spawn Im使用libgdx您可以通过以下方式安排任务: Array<Sprite> sprites; Texture texture; SpriteBatch bat

我是一个新的游戏创作者。 我有几个盒子可以从屏幕的顶部移动到底部,我需要在它们之间留出1个单位的距离。 除了距离不精确外,其他一切都很好,我认为deltatime导致了这个问题 这是我移动箱子的方式: objX-=延迟时间*速度

更新

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

Im使用libgdx

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

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();
}
数组精灵;
纹理;
喷雾批;
浮动速度=35;
@凌驾
公共void create(){
sprites=新数组();
纹理=新纹理(“badlogic.jpg”);
批次=新的SpriteBatch();
Timer.instance().scheduleTask(新的Timer.Task()){
@凌驾
公开募捐{
繁殖();
}
},1,2);
}
私有void spawn(){
雪碧雪碧=新雪碧(纹理);
雪碧。设定尺寸(50,50);
setPosition(Gdx.graphics.getWidth()/2,0);
雪碧。添加(雪碧);
}
@凌驾
公共无效呈现(){
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
float delta=Gdx.graphics.getDeltaTime();
batch.begin();
用于(精灵精灵:精灵){
sprite.setY(sprite.getY()+delta*速度);
雪碧.抽(批);
}
batch.end();
}

经过一番努力,我终于想出了一个主意 不要通过
deltatime
移动框并生成它们,而是使框保持静态并将摄影机移到它们上方

所以我把摄像机移到这里

    public void render(float delta) {
    posCameraDesired.y += 2000.0f * Gdx.graphics.getDeltaTime();
    guiCam.position.lerp(posCameraDesired, 0.1f);
    SemiRender();
}
我有静态的
Y
,每次产卵后我都会更新它
lastY=10+lastY+((宽度/4)/2)*3
以及其他一些逻辑,以便在它们通过
视口时循环使用它们。

每个人都很快乐

您使用的是
Gdx.graphics.getDeltaTime()
?@EthanBar是的,我使用过,但距离会随机变化,在unity3d中,我输入了fixedupdate以精确表示,但在Gdx中,我不知道如何修复it@EthanBar顺便说一句,我用它来生成box:time+=delta;如果(时间>=3.0f)spawn@newuser什么是delta?@AbhishekAryan deltatimei刚刚尝试了速度=1000,延迟秒=0.0f,间隔=0.3f,但它仍然像一个循环,每3或4个产卵会让它们之间的距离更长