2017-11-15 27 views
3

LibGDXとタイルマップで視差効果をゲームに加える必要があります。背景は、前景とは異なる速度で移動する必要があります。ドキュメントhttps://github.com/libgdx/libgdx/wiki/Tile-mapsで言った:LibGDX:タイルマップでの視差効果

個別に各レイヤをレンダリングし、すべての 層のためのビューを変更することにより、あなたはまた、視差効果を達成することができます。

現在の実装:同じ速度でレンダリングPlayScreenVariantTwo、前景と背景を持つ:PlayScreenVariantOneですべての作品が、背景には、フォアグラウンド

public class PlayScreenVariantOne implements Screen { 

    private TextureAtlas atlas; 
    private OrthographicCamera gameCam; 
    private Viewport viewport; 
    private TmxMapLoader mapLoader; 
    private TiledMap map; 
    private OrthogonalTiledMapRenderer renderer; 
    ... 

    // ... 
    // ... bla-bla-bla... 
    // ... 
    @Override 
    public void render(float delta) { 
     update(delta); 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     renderer.setView(gameCam); 
     renderer.render(); 

     game.batch.setProjectionMatrix(gameCam.combined); 
     game.batch.begin(); 

     player.draw(game.batch); 
     game.batch.end(); 
     hud.stage.draw(); 

    } 
} 

視差実装のように同じ速度で移動。視差効果が働きません! :*(

public class PlayScreenVariantTwo implements Screen { 

    private TextureAtlas atlas; 
    private OrthographicCamera gameCam; 
    private Viewport viewport; 
    private TmxMapLoader mapLoader; 
    private TiledMap map; 
    private OrthogonalTiledMapRenderer renderer; 
    ... 

    // ... 
    // ... bla-bla-bla... 
    // ... 
    @Override 
    public void render(float delta) { 
     update(delta); 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     int[] backgroundLayers = { 7 }; 
     int[] ground = { 9 }; 

     renderer.setView(gameCam.combined, (gameCam.position.x - gameCam.viewportWidth/2 - 2), gameCam.position.y - gameCam.viewportHeight/2, gameCam.viewportWidth, gameCam.viewportHeight); 
     renderer.render(backgroundLayers); 

     renderer.setView(gameCam.combined, (gameCam.position.x - gameCam.viewportWidth/2)/10, gameCam.position.y - gameCam.viewportHeight/2, gameCam.viewportWidth * 10, gameCam.viewportHeight); 
     renderer.render(ground); 

     game.batch.setProjectionMatrix(gameCam.combined); 
     game.batch.begin(); 

     player.draw(game.batch); 
     game.batch.end(); 

     hud.stage.draw(); 

    } 
} 

答えて

0

あなたは)あなたが必要とするものは、単にX(またはYを乗算してみました要因と背景で座標:

renderer.setView(gameCam.combined, (gameCam.position.x*0.5 - gameCam.viewportWidth/2 - 2), gameCam.position.y - gameCam.viewportHeight/2, gameCam.viewportWidth, gameCam.viewportHeight); 

または

renderer.setView(gameCam.combined, (gameCam.position.x - gameCam.viewportWidth/2 - 2)*0.5, gameCam.position.y - gameCam.viewportHeight/2, gameCam.viewportWidth, gameCam.viewportHeight); 

私がいることを追加しました"* 0.5"なので、バックグラウンドは2倍遅くなります。どちらの行があなたに良い結果をもたらすのかはっきりしません。自分のために試してみる必要がありますが、これはideの倍数の背景座標XまたはYです。 differenを設定する必要がありますtスピード。

+0

カメラはまだ同じ速度で動きますが、背景の半分をカットします。レイヤーの半分しか表示していないBG用のカメラ – Lugaru

+0

第二の変種は、私が持っていたものと全く同じ結果を出します。 – Lugaru

関連する問題