美文网首页LibGDX
LibGDX图形模块之视口

LibGDX图形模块之视口

作者: 天神Deity | 来源:发表于2017-09-11 23:10 被阅读30次

当处理不同的屏幕时,通常需要决定采取何种策略来处理不同屏幕尺寸和宽高比.Camera 和Stage 支持不同的视口策略

Camera.project(vec,viewportX,viewportY,viewportWidth,viewportHeight)

LibGDX提供了一种方便的处理这个问题的方法,Viewport (source).

用法

视口始终管理Camera的viewportWidth和viewportHeight。 因此需要向视口的构造函数提供Camera实例。

    private Viewport viewport;
    private Camera camera;

    public void create() {
        camera = new PerspectiveCamera();
        viewport = new FitViewport(800, 480, camera);
    }

每当调整大小事件发生时,视口需要被通知并进行更新.这将自动重新计算视口参数并更新相机:

public void resize(int width, int height) {
        viewport.update(width, height);
}

此外,它将通过glViewport更改OpenGL视口,如果需要,可以添加黑色条,使其无法在黑条的区域中呈现。有关如何执行此操作的示例, 看这个测试.

如果需要选取视口,Viewport提供方便了project / unproject / getPickRay方法,你可以使用它们来相互转换屏幕和世界坐标。
当使用Stage时,调整大小事件发生时,Stage的视口需要更新。

    private Stage stage;

    public void create() {
        stage = new Stage(new StretchViewport(width, height));
    }

    public void resize(int width, int height) {
        // use true here to center the camera
        // that's what you probably want in case of a UI
        stage.getViewport().update(width, height, false);
    }

多个视口

StretchViewport(拉伸)

StretchViewport (source) 支持使用虚拟屏幕大小。 这意味着可以假设屏幕总是大小为virtualWidth x virtualHeight。 然后,该虚拟视口将始终被拉伸以适应屏幕。 没有黑色条,但缩放发生后,长宽比可能不一样。

StretchViewport

FitViewport (source) 也支持虚拟屏幕尺寸。 与StretchViewport的区别在于,它将始终保持虚拟屏幕大小(虚拟视口)的宽高比,同时尽可能缩放它以适合屏幕。 这个策略的一个缺点是可能会出现黑条。

FitViewport

FillViewport

FillViewport (source) 也保持虚拟屏幕大小的宽高比,但与FitViewport相反,它将始终填满整个屏幕,这可能导致视口部分无法全部显示。

ScreenViewport

ScreenViewport (source) 没有固定的虚拟屏幕大小; 它将始终匹配窗口大小,这意味着不会发生缩放,并且不显示黑条。 作为缺点,这意味着游戏可能会改变,因为屏幕较大的玩家可能会看到更多的游戏画面。

ScreenViewport

ExtendViewport

ExtendViewport (source) 通过在一个方向上扩展世界来保持世界纵横比的无黑条。 世界首先被缩放以适应视口,然后将较短的尺寸延长以填充视口。

ExtendViewport

可以向ExtendViewport提供最大尺寸的集合,在这种情况下,当宽高比落在支持的范围之外时,将添加黑条。

Paste_Image.png

自定义视口可以继承Viewport并复写update(width,height)实现自定义的视口策略,另一种方法是使用通用的ScalingViewport并提供另外一个尚未被任何其他视口覆盖的缩放。 一个例子可能是提供Scaling.none,这将导致一个完全“StaticViewport”,它始终保持相同的大小。 它可能看起来像这样:


Paste_Image.png

相关文章

  • LibGDX图形模块之视口

    当处理不同的屏幕时,通常需要决定采取何种策略来处理不同屏幕尺寸和宽高比.Camera 和Stage 支持不同的视口...

  • LibGDX图形模块之剖析

    本文介绍的实用工具可能会派上用场,以防遇到性能问题,并需要开始分析你的游戏。 FPSLogger FPSLogge...

  • LibGDX图形模块之Ninepatches

    本文介绍了NinePatch图像,如何创建它们以及如何在Libgdx上下文中使用它们。 在你开始之前 本指南适用于...

  • LibGDX图形模块之清屏

    要清除Libgdx中的屏幕与在常规OpenGL应用程序中清除屏幕是不同的。 唯一的区别在于如何访问OpenGL上下...

  • LibGDX图形模块之网格

    网格是一组顶点(和可选的索引)的组合,它们描述了用于渲染的几何图形。 顶点以顶点缓冲对象(VBOs)的形式保存在V...

  • LibGDX图形模块之截屏

    使用以下代码可以截屏:

  • LibGDX图形模块之位图字体

    LibGdx使用位图文件(png)来渲染字体。 字体中的每个字形都具有相应的纹理区域。BitmapFont cla...

  • LibGDX图形模块开篇

    此页面需要重写。 介绍 图形模块提供有关当前设备显示和应用程序窗口的信息,以及有关当前OpenGL上下文的信息和访...

  • LibGDX 游戏开发 之 视口 Viewports

    原文链接:https://github.com/libgdx/libgdx/wiki/Viewports译者:重庆...

  • LibGDX图形模块之正交相机

    本页介绍了OrthographicCamera类和用法。 正交相机仅在2D环境中使用,因为它实现了平行(正投影)投...

网友评论

    本文标题:LibGDX图形模块之视口

    本文链接:https://www.haomeiwen.com/subject/ztlqsxtx.html