我有一個精靈,我與相機一起在世界上前進。他們都以相同的速度移動。但是,我看到移動精靈的輕微抖動。考慮到我爲相機和精靈添加了相同的Y值,這應該是可能的嗎?相機和精靈以相似的速度移動,但出現JITTER
(注:對於子畫面的過濾器被設置爲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),則抖動消失。看來,我正在使用的速度很大,導致了這一點。我可以將相機與精靈同步,這樣我就可以使用高速而沒有抖動嗎?
高速度與增量時間相乘導致由於增量時間波動在一定程度上的輕微變化。如果這是一款手機遊戲,最好*不要*用增量時間動畫角色,而是假設fps始終爲60,然後確保它永遠不會因爲您在代碼中繪製或做的事情而下降。但如果是這樣,最糟糕的情況是遊戲會在很短的時間內放慢速度。 – LearnCocos2D 2014-11-08 09:26:40
謝謝!我想我會停止使用delta,如果我在完成遊戲後獲得了恆定的60FPS,並將所有紋理都放入一個或兩個地圖集中。現在雖然我會把速度降到32f而不是64f。抖動很好地減少了。 – gogonapel 2014-11-08 09:30:19
爲什麼你在渲染你的世界之後更新相機並設置投影矩陣? – Xoppa 2014-11-08 15:20:22