Libgdx中视口和摄影机之间的差异?

Libgdx中视口和摄影机之间的差异?,libgdx,Libgdx,我不熟悉LibGdx框架,在使用视口和摄影机时遇到问题。有人能给出两者之间的简单区别以及两者的使用方法吗?Camera 简单地说,这台相机就像一台现实生活中的相机。在LibGDX中,摄像机用于显示我们的游戏区域 例如:在拍摄一部电影时,导演会做很多准备工作,一切都会通过摄像机拍摄下来。在libgdx中,我们以同样的方式创建了许多精灵、纹理等。。所有这些东西都被摄像机捕捉并呈现在屏幕上。通过一种简单的方式,我们可以看出摄像机显示了游戏区域 视区 Viewport主要用于使我们的游戏在视觉上与多台设

我不熟悉LibGdx框架,在使用视口和摄影机时遇到问题。有人能给出两者之间的简单区别以及两者的使用方法吗?

Camera 简单地说,这台相机就像一台现实生活中的相机。在LibGDX中,
摄像机
用于显示我们的游戏区域

例如:在拍摄一部电影时,导演会做很多准备工作,一切都会通过摄像机拍摄下来。在libgdx中,我们以同样的方式创建了许多精灵、纹理等。。所有这些东西都被摄像机捕捉并呈现在屏幕上。通过一种简单的方式,我们可以看出摄像机显示了游戏区域

视区
Viewport
主要用于使我们的游戏在视觉上与多台设备兼容

不同的设备具有不同的纵横比。当游戏在不同的设备上运行时,可能会出现一些图形问题(图像拉伸、角色脱离屏幕等)。LibGDX提供了s
Viewport
来解决此问题

有三种主要类型(不限于)的
视口可用:

  • 有关更多详细信息,请查看以下链接:


    摄像机定义了有利位置以及屏幕上可以看到多少世界。游戏中的一切都是通过定义世界视图的摄像头看到的。在2D游戏中,使用正交摄影机定义当前可见的世界矩形。OpenGL使用矩阵计算所看到的内容,因此要使用相机,您需要更新它,并将其
    组合的
    矩阵传递到SpriteBatch中

    视口在LibGDX中有三种不同的含义:

  • 在OpenGL视口中,屏幕的矩形区域OpenGL当前设置为以像素为单位绘制。无论正交摄影机具有什么尺寸,它定义的世界的可视矩形都会拉伸以适合OpenGL视口,这意味着它可能看起来扭曲/挤压

  • 正交摄影机的
    视口宽度
    视口高度
    。这些术语是LibGDX幼年时期的一个不幸遗物,当时假设您总是使用大小等于OpenGL视口大小的相机。这些术语实际上描述了您可以看到的世界矩形的大小,但此可见矩形可以具有任意尺寸,并且最终图像会拉伸以适合OpenGL视口

  • Viewport类,它是一个同时管理正交摄影机和OpenGL视口的类,用于实现处理屏幕密度和纵横比无限可能性的特定策略

  • LibGDX视口类是通过提供世界宽度和世界高度来设置的,世界宽度和世界高度定义了您希望在屏幕上可见的游戏世界的矩形。根据您使用的视口类型,此矩形将以某种方式用于定位多个大小的屏幕

    LibGDX包含的一些视口示例:

    StretchViewport:它拉伸世界宽度/高度以适应屏幕,即使这会导致失真。这不应该用于已发布的游戏,因为玩家会讨厌它。仅适用于非常快速和肮脏的原型

    FitViewport:它放大世界宽度/高度以适应屏幕,并在OpenGL视口中设置信箱,以使图像不失真。这就像你在电视上看电影时看到的黑条。这是设计游戏最快/最脏的方法,因为你知道你的世界的可视矩形在所有设备上都是完全相同的。但是你的玩家可能不喜欢浪费屏幕空间。如果你把它用于iOS游戏,苹果会拒绝它

    扩展视图端口:它放大世界宽度/高度以适应屏幕,然后放大世界宽度或高度以填充屏幕上的任何剩余空间,这样图像就不会失真。如果你不想玩字母拳击,这是最好的选择,但这意味着你必须在设计游戏时牢记,你必须画出足够的图案来覆盖你计划的世界宽度/高度以外的可能额外区域,并努力保持游戏的公平性

    ScreenViewport:这一个是唯一的,因为它没有世界宽度/高度的输入。它只是使世界的宽度和高度与屏幕的像素大小相匹配。这不应该用于游戏,因为在大型XHD设备上看到的矩形可能是小型MD设备的五倍或更多。它有它的UI用途。您可以为不同的屏幕密度设计多个UI资源,并使用ScreenViewport,使文本和按钮在所有设备上看起来都非常清晰

    我个人总是使用ExtendViewport进行游戏,这样屏幕空间就不会被浪费,游戏可以在iOS上发布

    对于UI,我在游戏性HUD中使用ExtendViewport(将小部件推到屏幕边缘),如果游戏性上有一个暂停屏幕,则使用FitViewport。对于此用途,FitViewport很好,因为您实际上看不到黑条。如果你知道一个复杂的暂停屏幕用户界面中的矩形总是相同的,那么管理它就更容易了


    为了让用户界面看起来相当简洁,我将其生成为大约200-250dpi手机屏幕上像素对像素的大小,并对其进行三线性过滤

    摄像机就像一只眼睛,它显示它所看到的东西。 视口仅决定如何显示摄影机观察到的对象。 例如,如果你有一个游戏,使用非常小的精灵,并决定把它放在大屏幕上的图像将是非常小的。这就是视口的作用。它的任务只是适当地“加宽”图像,这样你就不必担心不同的屏幕分辨率

    附言