我试图了解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)从屏幕移出或移入。为什么不停留在拐角处?我该怎么做才能留下来?

最佳答案

好了,您的视口也需要一台摄像头。摄像机将游戏显示在屏幕上。视口是管理相机尺寸的对象。当涉及到批处理绘图时,您需要将批处理链接到该摄像机。这是初始化视口的方式:

private Camera camera;
private Viewport viewport;

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


这会将视口将要操纵的相机设置为OrthographicCamera。您也可以使用Camera的任何子类。

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

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


设置投影矩阵将确保批处理绘制到该摄影机上,并因此通过您创建的视口进行绘制。希望对您有所帮助,如有其他问题,请告诉我。您可以找到有关查看端口here的更多信息。

关于java - libgdx如何获取世界单位的高度和宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44973121/

10-11 22:38
查看更多