在渲染中的Libgdx TiledMap错误

时间:2014-11-13 11:53:19

标签: java libgdx

我使用libgdx库进行类似马里奥的游戏。

一切正常但有时候(特别是当相机快速运行时)我的TileMap在渲染过程中有一点小错误。

价值千言万语的图片,所以这里是:http://postimg.org/image/4tudtwewn/

我试图增加FPS,但没有变化。我不知道它来自哪里。

这是我的代码:

public void show() {
    TmxMapLoader loader = new TmxMapLoader();
    this.plan = loader.load("maps/level-"+this.world+"-"+this.level+".tmx");
    this.renderer = new OrthogonalTiledMapRenderer(this.plan);
    ...

public void render(float delta) {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    this.renderer.render();// rendu de la carte
    Batch batch = this.renderer.getSpriteBatch();
    ...

3 个答案:

答案 0 :(得分:0)

我认为它是关于过滤的。 这将有所帮助:

TiledMapRenderer Artifact

答案 1 :(得分:0)

如果您所指的问题是导入tileset时可以修复的间距,如Tenfour04所述

enter image description here

添加或更改像素填充。

答案 2 :(得分:0)

当相机的位置与屏幕空间坐标(像素)不完全对齐时,会发生这种情况。 这会导致一些精灵被舍入到下一个像素,而另一些精灵(被连接到那些)被舍入到前一个像素,导致可见的丑陋毛刺。

我能想出的最简单的解决方法是确保相机位置始终与屏幕空间坐标完美对齐。

public class TileMapCamera extends OrthographicCamera {

    // Map tile size to round to
    private int tileSize;

    /**
     * Create a pixel-perfect camera for a map with the specified tile size
     * @param tileSize
     */
     public TileMapCamera(int tileSize){
        this.tileSize = tileSize;
     }

     @Override
     public void update(){
         // Round position to avoid glitches
         float prevx = position.x;
         float prevy = position.y;
         position.x = (int)(position.x * tileSize) / (float)tileSize;
         position.y = (int)(position.y * tileSize) / (float)tileSize;
         super.update();
         position.set(prevx, prevy, 0);
    }
}

这适用于基于图块的坐标视口:

mapViewport = new FitViewport(16, 15, new TileMapCamera(map.getProperties().get("tilewidth", Integer.class)));

如果您正在使用基于像素的坐标视口,则应将相机位置舍入到最接近的整数。