libgdx如何以世界单位获得高度和宽度

时间:2017-07-07 14:19:41

标签: java libgdx viewport viewport-units

我想了解viewportsLibgdx中的使用情况我有变量V_WIDTH = 800V_HEIGHT = (V_WIDTH / (4f/3f))所以V_HEIGHT = 600。这是我初始化和更新视口的方式:

// init viewport (in the constructor):
    viewport = new FitViewport(NoThanksClient.V_WIDTH, NoThanksClient.V_HEIGHT);

    // in the resize method:
    viewport.update(width,height, true);

我有一个绿色矩形的纹理,我试图在左上角绘制它。这就是我做的方式:

        batch.draw(
            frameTexture,
            0,
            viewport.getScreenHeight() - FRAME_TEXTURE_HEIGHT,
            FRAME_TEXTURE_WIDTH,
            FRAME_TEXTURE_HEIGHT);

并且一切顺利。但是当我调整屏幕大小时,纹理(frameTexture)从屏幕上移出或进入。为什么它不在角落?我该怎么做才能让它留下来?

1 个答案:

答案 0 :(得分:1)

嗯,你的视口也需要一个摄像头。相机是将游戏显示在屏幕上的内容。视口是管理相机大小的内容。在使用批处理绘图时,您需要将批处理链接到该摄像机。这是您应该初始化视口的方式:

private Camera camera;
private Viewport viewport;

public void create() {
     camera = new OrthographicCamera();
     viewport = new FitViewport(NoThanksClient.V_WIDTH, NoThanksClient.V_HEIGHT, camera);
}

这将视口将操作的相机设置为OrthographicCamera。您也可以使用任何子类摄像头。

您的调整大小方法很好,您只需在绘制之前再向渲染方法添加一行。

batch.setProjectionMatrix(camera.combined);
batch.draw(
           frameTexture,
           0,
           viewport.getScreenHeight() - FRAME_TEXTURE_HEIGHT,
           FRAME_TEXTURE_WIDTH,
           FRAME_TEXTURE_HEIGHT);

设置投影矩阵将确保批量绘制到该摄像机,从而通过您创建的视口。我希望这有帮助,如果您有任何疑问,请告诉我。您可以找到有关查看端口here的更多信息。