我試圖尋找解決這個問題的所有,並沒有運氣;儘管我已經嘗試了各種建議,我將在下面與該問題一起詳細說明。LibGDX拼貼:移動相機導致瓷磚結巴/模糊/波
我創建了一個非常小而簡單的示例項目,用於測試渲染平鋪地圖並設置帶有視口和一些簡單輸入處理的攝像頭,以便我可以用WASD「漫遊」地圖。問題是,當我試圖在地圖周圍漫遊時,我會在地圖上看到奇怪的效果。這些包括:
- 瓷磚「揮舞着」。通過這個我的意思是當我向上/向下滾動或在屏幕上會出現「波浪」
- Glitchy/Stuttering屏幕。相機有時不會顯得平滑。
- 瓷磚的變化,(例如,黃色瓷磚上的黑色條在移動相機時,側面或頂部會有一個不同顏色的黃色像素,這些「額外」像素的哪一側取決於哪一個方向相機移動)。我認爲這叫做紋理出血,但我不確定。
這個事情我已經嘗試:
- 墊都具有相同的顏色的像素的瓷磚在各方面(這擺脫了對地圖的黑色水平線)
- 設置過濾器,以線性/最近的(嘗試了所有組合)
- 玩弄視 相機
- 變化速度
有沒有人有任何想法可能會出錯?在繼續之前,我只是不想確定如何正確渲染地圖並正確移動相機,而無任何問題。
確切的代碼:
public class GameScreen implements Screen {
final Alpha game;
private OrthographicCamera camera;
private FitViewport viewport;
private TiledMap map;
private OrthogonalTiledMapRenderer renderer;
private Rectangle player;
public GameScreen(final Alpha game) {
this.game = game;
camera = new OrthographicCamera();
viewport = new FitViewport(800, 480, camera);
TmxMapLoader.Parameters params = new TmxMapLoader.Parameters();
params.textureMinFilter = Texture.TextureFilter.Nearest;
params.textureMagFilter = Texture.TextureFilter.Linear;
map = new TmxMapLoader().load("simple_padded_same_color.tmx");
renderer = new OrthogonalTiledMapRenderer(map);
player = new Rectangle(32,32,32,32);
}
@Override
public void render(float delta) {
camera.update();
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// handle input
if (Gdx.input.isKeyPressed(Input.Keys.A)) {
player.setX(player.getX() - 200 * delta);
}
if (Gdx.input.isKeyPressed(Input.Keys.D)) {
player.setX(player.getX() + 200 * delta);
}
if (Gdx.input.isKeyPressed(Input.Keys.W)) {
player.setY(player.getY() + 200 * delta);
}
if (Gdx.input.isKeyPressed(Input.Keys.S)) {
player.setY(player.getY() - 200 * delta);
}
camera.position.set(player.getX(), player.getY(), 0);
renderer.setView(camera);
renderer.render();
}
@Override
public void resize(int width, int height) {
viewport.update(width, height);
}
@Override
public void show() {
}
@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
map.dispose();
renderer.dispose();
}
}
首先,您應該在設置新位置後調用'camera.update()'。接下來,嘗試使用一個常量增量,而不是由libgdx提供的與您的計算機功耗相關的增量。 –