2016-03-22 10 views
3

LibGDXでタイルマップをレンダリングする際に問題があります。カメラを動かすとアーティファクトが現れます。LibGDX Box2Dタイルマップアーチファクト

これは余白と間隔(フラグメント)と私のタイルセットです:私は、カメラを移動すると tileset

は、アーティファクトを表示されます。 artifacts

そして、ここでは私のレンダリングの世界クラスです。

private GameApp game; 

private OrthographicCamera gameCamera; 
private Viewport viewport; 

private TiledMap map; 
private TmxMapLoader mapLoader; 
private OrthogonalTiledMapRenderer mapRenderer; 

private MainCharacter character; 

private World world; 
private Box2DDebugRenderer worldRenderer; 

public GameplayScreen(GameApp game) { 
    this.game = game; 

    gameCamera = new OrthographicCamera(); 

    viewport = new FitViewport(
      game.getDisplayWidth()/GameApp.PPM, 
      game.getDisplayHeight()/GameApp.PPM, 
      gameCamera 
     ); 

    mapLoader = new TmxMapLoader(); 
    map = mapLoader.load("testmap1.tmx"); 
    mapRenderer = new OrthogonalTiledMapRenderer(map, 1/GameApp.PPM); 

    gameCamera.position.set(new Vector2(600/GameApp.PPM, 200/GameApp.PPM), 0); 
    gameCamera.zoom -= 0.5; 

    world = new World(new Vector2(0, -10), true); 
    worldRenderer = new Box2DDebugRenderer(); 

    BodyDef bDef = new BodyDef(); 
    PolygonShape shape = new PolygonShape(); 
    FixtureDef fDef = new FixtureDef(); 
    Body body; 

    for (MapObject mapObject : map.getLayers().get("obstacles").getObjects().getByType(RectangleMapObject.class)) { 
     Rectangle rectangle = ((RectangleMapObject) mapObject).getRectangle(); 

     bDef.type = BodyDef.BodyType.StaticBody; 
     bDef.position.set(
       (rectangle.getX() + rectangle.getWidth()/2)/GameApp.PPM, 
       (rectangle.getY() + rectangle.getHeight()/2)/GameApp.PPM 
     ); 

     body = world.createBody(bDef); 

     shape.setAsBox(rectangle.getWidth()/2/GameApp.PPM, rectangle.getHeight()/2/GameApp.PPM); 
     fDef.shape = shape; 

     body.createFixture(fDef); 
    } 

    character = new MainCharacter(world); 
} 

@Override 
public void show() { 

} 

public void handleInput(float delta) { 
    if (Gdx.input.isKeyJustPressed(Input.Keys.UP)) { 
     character.getBody().applyLinearImpulse(new Vector2(0, 3.8f), character.getBody().getWorldCenter(), true); 
    } 

    if (Gdx.input.isKeyPressed(Input.Keys.RIGHT) && character.getBody().getLinearVelocity().x <= 1) { 
     character.getBody().applyLinearImpulse(new Vector2(0.05f, 0), character.getBody().getWorldCenter(), true); 
    } 

    if (Gdx.input.isKeyPressed(Input.Keys.LEFT) && character.getBody().getLinearVelocity().x >= -1) { 
     character.getBody().applyLinearImpulse(new Vector2(-0.05f, 0), character.getBody().getWorldCenter(), true); 
    } 
} 

public void update(float delta) { 
    handleInput(delta); 

    world.step(1/60f, 6, 2); 

    gameCamera.position.x = character.getBody().getPosition().x; 
    gameCamera.position.y = character.getBody().getPosition().y; 

    gameCamera.update(); 
    mapRenderer.setView(gameCamera); 
} 

@Override 
public void render(float delta) { 
    update(delta); 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    mapRenderer.render(); 
    worldRenderer.render(world, gameCamera.combined); 
} 

@Override 
public void resize(int width, int height) { 
    viewport.update(width, height); 
} 

... 

私は、タイルセットヘルプの間隔が読んでいることを読んだ。しかし、それはまだ適切に動作しません。


EDIT:

TmxMapLoader.Parameters par = new TmxMapLoader.Parameters(); 
    par.textureMinFilter = TextureFilter.Nearest; 
    par.textureMagFilter = TextureFilter.Nearest; 

map = mapLoader.load("testmap1.tmx", par); 

私は私のコードを編集して、まだ動作しません。数日間のソリューションを求めています。


EDIT2

私はもう一度試してください。コード:

atlasMapLoader = new AtlasTmxMapLoader(); 
testMap = atlasMapLoader.load("testmap1.tmx"); 

このロードマップ。タイルエディタで

enter image description here

私は 『アトラス』値 『TilesetBig.txt』と呼ばれるマップにプロパティを追加します。私は「.TXT」ファイルを持っています。

今、マップはタイルを表示しません。 box2dの障害は引き続き表示されます。私は何が間違っていますか?


最後に、OrthoCachedTiledMapRenderedを使用しました。

答えて

2

タイルセットをでパックする必要があります。最も近いテクスチャフィルタが設定されています。

Linearを使用している場合、GLはこのような不具合の原因となる周囲のピクセルを使用して平均境界ピクセルです。

Read this article LibGDXのテクスチャフィルタの詳細については、こちらをご覧ください。

+0

ありがとうございます。私は私の質問を編集する。私は最近のフィルターを使用しようとしますが、それでも動作しません。 – Forest

+0

テクスチャパッカーでも「境界線のアーティファクトを減らす」を使用しましたか? –

+0

私はテクスチャパッカーを使用しません。私はGimpのタイルの間にスペースを入れたグラフィックを用意しました。私はそれを使わなければならないことを理解していますか? – Forest

関連する問題