【问题标题】:LibGdx not scaling to whole screenLibGdx 没有缩放到整个屏幕
【发布时间】:2016-12-11 01:49:53
【问题描述】:

在我的 LibGdx 游戏中,我使用了 ExtendedViewport

 new ExtendViewport(LevelSmash.WIDTH, LevelSmash.HEIGHT, camera);

我设置宽度为708,高度为900,

在我的渲染方法中,我将 spritebatch 缩放到视口的投影

    @Override
public void render(SpriteBatch sb) {

    sb.setProjectionMatrix(vp.getCamera().projection);

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

    sb.begin();
    level.render(sb);
    sb.end();

    stage.act();
    stage.draw();
}

关卡的渲染方法是

    @Override
public void render(SpriteBatch sb) {
    sb.setProjectionMatrix(vp.getCamera().projection);
    sb.draw(background, 0 / LevelSmash.PPM, 0 / LevelSmash.PPM);

    player.draw(sb);
}

PPM 等于 100

我希望背景占据整个屏幕,因为它的宽度和高度我将所有内容缩放到 (708, 900)

但它看起来像这样

【问题讨论】:

    标签: java android ios libgdx


    【解决方案1】:

    看起来您的相机以0, 0 为中心,并且您的纹理从0, 0 开始绘制到708, 900。最好将相机的中心设置为图像的中心。

    camera.position.set(LevelSmash.WIDTH / 2, LevelSmash.HEIGHT / 2);
    camera.update();
    

    编辑

    我觉得奇怪的是完全绘制了背景。

    sb.draw(background, 0 / LevelSmash.PPM, 0 / LevelSmash.PPM);
    // 0 / X == 0 so width and height are always 0;
    

    你能解释一下吗?因为很难相信你会看到那条线所画的任何东西。

    【讨论】:

    • 我尝试将它添加到第一个渲染方法并没有改变任何东西?
    • 这可能是因为您只使用投影矩阵而不是组合矩阵 (sb.setProjectionMatrix(vp.getCamera().combined);)。您还需要实现resize 方法,请参阅github.com/libgdx/libgdx/wiki/Viewports。并且应该放弃 PPM 的东西,请参阅:xoppa.github.io/blog/pixels
    • 我没有调整大小的方法,因为我的类都没有扩展 ApplicationAdapter 所以我不知道它属于哪里,我将其更改为组合但没有改变任何东西,如果我遗漏了一些明显的东西,对不起对此有点陌生。 [代码:pastebin.com/Nxn8hjF9]
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多