相机和精灵以相似的速度移动但出现抖动

时间:2014-11-08 06:45:52

标签: opengl-es libgdx opengl-es-2.0

我有一个精灵,我带着相机在世界上前进。它们都以相同的速度移动。但是,我看到移动的精灵略有抖动。考虑到我向相机和精灵添加相同的Y值这是否可能?

(注意:精灵的过滤器设置为LINEAR)

public void AdvanceWorld(){ 
    float delta = Gdx.graphics.getDeltaTime();      
    float delta_64_srsz = delta * 64f;
    float velo = spaces.world_velocity * delta_64_srsz;
    spaces.spaceshipAdvance(velo);      
    camera.position.y += velo;
}   

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    AdvanceWorld();
    ...
    batch.begin();      
    ....
            batch.end();
            ...
    camera.update();    
    batch.setProjectionMatrix(camera.combined);     
}

public void spaceshipAdvance(float velocity){
    sprite.setPosition(sprite.getX(), sprite.getY() + velocity);
    thrusters.setPosition(thrusters.getX(), thrusters.getY() + velocity);   
}

然而,在帧速率稳定在60fps左右之后,抖动消失并且仅略微明显。只有当FPS有变化时才会注意到。

另外,如果我降低速度(delta_64_srsz = delta * 16f),则抖动消失。似乎我正在使用的大速度导致这个。我可以将相机与精灵同步,这样我就可以在没有抖动的情况下使用高速度吗?

2 个答案:

答案 0 :(得分:2)

你应该避免自己移动相机,而是让相机跟随精灵。

这可以通过以下方式实现:

首先制作OrthographicCamera,如下所示:

OrthographicCamera cam = new OrthographicCamera(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());

接下来在render()方法中,使用精灵camx位置更新y位置,如下所示:

cam.position.set(sprite.getX(), sprite.getY(), 0);

之后你应该将投影矩阵设置为cam.combined,如下所示:

batch.setProjectionMatrix(cam.combined);

最后更新你的相机:

cam.update();

您应该将这最后三个步骤放在render()方法中,如下所示:

public void render(float delta){
    // other stuff ...
    cam.position.set(sprite.getX(), sprite.getY(), 0);
    cam.update();
    batch.setProjectionMatrix(cam.combined);
    // other stuff ...
}

答案 1 :(得分:0)

使用米而不是像素怎么样?不使用像素总是很好的做法。