【问题标题】:Libgdx TiledMap bug in render渲染中的 Libgdx TiledMap 错误
【发布时间】:2014-11-13 11:53:19
【问题描述】:

我用 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();
    ...

【问题讨论】:

  • 您能否提供有关相机功能的更多信息?管理、调整大小、创建相机等方法。因为我认为这不是 spritebatch 的问题,更像是由错误的正交相机设置引起的舍入误差。
  • 确保您的图块在图集中有填充物。

标签: java libgdx


【解决方案1】:

当您的相机位置与屏幕空间坐标(像素)不完全对齐时,就会发生这种情况。 这会导致一些精灵被四舍五入到下一个像素,而其他一些(与那些相关的)被四舍五入到前一个像素,从而导致可见的丑陋故障。

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

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)));

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

【讨论】:

    【解决方案2】:

    我认为它与过滤有关。 这将有所帮助:

    TiledMapRenderer Artifact

    【讨论】:

      【解决方案3】:

      如果您所指的问题是在导入图块集时可以修复的间距,如 Tenfour04 所示

      添加或更改像素填充。

      【讨论】:

        猜你喜欢
        • 2013-01-23
        • 2016-03-06
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 2015-09-05
        相关资源
        最近更新 更多