我有一个精灵,我带着相机在世界上前进。它们都以相同的速度移动。但是,我看到移动的精灵略有抖动。考虑到我向相机和精灵添加相同的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),则抖动消失。似乎我正在使用的大速度导致这个。我可以将相机与精灵同步,这样我就可以在没有抖动的情况下使用高速度吗?
答案 0 :(得分:2)
你应该避免自己移动相机,而是让相机跟随精灵。
这可以通过以下方式实现:
首先制作OrthographicCamera
,如下所示:
OrthographicCamera cam = new OrthographicCamera(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
接下来在render()
方法中,使用精灵cam
和x
位置更新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)
使用米而不是像素怎么样?不使用像素总是很好的做法。