java - libgdx 如何获取世界单位的高度和宽度

标签 java libgdx viewport viewport-units

我试图了解 Libgdxviewports 的使用,我有变量 V_WIDTH = 800V_HEIGHT = (V_WIDTH/(4f/3f)) 所以 V_HEIGHT = 600。这就是我初始化和更新视口(viewport)的方式:

// 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) 会从屏幕中移出或移入。为什么它不留在角落里?我该怎么做才能让它留下来?

最佳答案

嗯,你的视口(viewport)也需要一个相机。相机是将游戏显示到屏幕上的。视口(viewport)用于管理相机的大小。当涉及到使用批处理进行绘图时,您需要将批处理链接到该相机。这是初始化视口(viewport)的方式:

private Camera camera;
private Viewport viewport;

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

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

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

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

设置投影矩阵将确保批处理绘制到该相机,从而通过您创建的视口(viewport)。我希望这对您有所帮助,如果您还有其他问题,请告诉我。您可以找到有关视口(viewport)的更多信息here .

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

相关文章:

java - 在thread_pool中始终始终搜索特定节点

java - 构建 Java 浏览器时处理 CSS 和 JavaScript

java - 记录 Maven 依赖关系

java - 如何在 LibGDX 中的按钮上切换 "over"样式?

ios - 即使视口(viewport)元标记中的分辨率宽度为 1536,ipad 3 设备宽度是否始终为 768?

java - SQL ORDER BY 子句可以与数据源中的任何列一起使用吗?

libgdx 中的 json 文件

image - 为什么您看到内存中加载的图像大小(在libgdx中)占用了您自己的更多照片

jquery - 我想要一个大小为 40mm X 40mm 的 div 在任何屏幕上并且独立于缩放?

extjs - 动态添加项目到边框视口(viewport)