【问题标题】:LibGDX: Parallax effect with tiled mapsLibGDX:平铺地图的视差效果
【发布时间】:2018-04-29 06:35:45
【问题描述】:

需要在游戏中使用 LibGDX 和平铺地图制作视差效果。背景应该以与前景不同的速度移动。在文档中https://github.com/libgdx/libgdx/wiki/Tile-maps 说:

通过单独渲染每一层并修改每一层的视图 层,还可以实现视差效果。

当前实现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();

    }
 }

视差实现PlayScreenVariantTwo 前景和背景以相同的速度渲染。视差效果不起作用! :*(

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

    }
 }

【问题讨论】:

    标签: java android libgdx parallax tiled


    【解决方案1】:

    您是否尝试简单地将背景的 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”,因此背景移动速度会慢两倍。不确定这两行中的哪一行会给您带来更好的结果 - 您必须自己尝试,但这就是理想 - 将背景坐标 X 或 Y 相乘,您需要设置不同的速度。

    【讨论】:

    • 相机仍然以相同的速度移动,但切断了一半的背景。 BG 的相机只显示一半的图层
    • 第二种变体给出了与我完全相同的结果 - 两个摄像机以相同的速度移动
    猜你喜欢
    • 2016-01-24
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2016-07-08
    • 1970-01-01
    • 2016-06-04
    • 2019-02-19
    相关资源
    最近更新 更多