在Libgdx中Viewport和相机之间的区别?

时间:2016-10-15 13:05:39

标签: libgdx

我是LibGdx框架的新手,无法使用视口和相机。任何人都可以给出两者之间的简单区别吗?

3 个答案:

答案 0 :(得分:4)

相机

简单来说,相机就像一个真实的相机。在LibGDX中,Camera用于显示我们的游戏区域。

例如:制作电影时,导演会做很多准备,一切都将通过相机拍摄。在libgdx中我们的游戏玩法相同,我们创建了许多精灵,纹理等等。所有这些东西都被相机捕获并渲染到屏幕上。我们可以通过一种简单的方式告诉相机显示游戏区域。

视口

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

不同的设备具有不同的宽高比。当游戏在不同的设备上运行时,可能会出现一些图形问题(拉伸图像,屏幕外的角色等)。 LibGDX提供了Viewport来解决这个问题。

Viewport有三种主要类型(不限于):

  1. StretchViewport
  2. FillViewport
  3. FitViewport
  4. 有关详细信息,请查看以下链接:

    LibGDX - Viewports

    LibGDX - Projection, Viewport & Camera

答案 1 :(得分:2)

相机定义了有利位置以及在屏幕上看到的世界多少。游戏中的一切都可以通过定义世界观的摄像机看到。在2D游戏的情况下,您使用OrthographicCamera定义当前可见的世界矩形。 OpenGL与矩阵一起使用来计算所看到的内容,因此要使用相机,您需要更新它并将其combined矩阵传递到SpriteBatch。

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

  1. OpenGL视口,屏幕OpenGL的矩形区域当前设置为以像素尺寸绘制。无论OrthographicCamera具有什么尺寸,它定义的世界的可视矩形都被拉伸以适合OpenGL视口,这意味着它可以看起来扭曲/压扁。

  2. OrthographicCamera的viewportWidthviewportHeight。这些术语是LibGDX初期的遗憾,当时假设你总是使用大小与OpenGL视口大小相等的相机。这些术语实际上描述了您可以看到的世界矩形的大小,但是这个可见的矩形可以具有任意尺寸,并且最终图像被拉伸以适合OpenGL视口。

  3. Viewport类,它是一个同时管理OrthographicCamera和OpenGL Viewport的类,以实现处理屏幕密度和宽高比无限可能性的特定策略。

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

    LibGDX的一些例子包括视口:

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

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

    ExtendViewport:它会扩大您的世界宽度/高度以适应屏幕,然后放大您的世界宽度或高度以填充屏幕上的任何剩余空间,以便图像不会成为扭曲。如果你不想要信箱,这是最好的选择,但这意味着你必须设计你的游戏,记住你必须绘制足够的空间以覆盖计划的世界宽度/高度之外的可能额外区域,并尽量保持游戏玩法相当公平。

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

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

    对于UI,我使用ExtendViewport进行游戏玩法HUD(将小部件推向屏幕边缘),如果有一个覆盖游戏玩法的暂停屏幕,则使用FitViewport。对于这个用途,FitViewport很好,因为你实际上看不到黑条。如果您知道它所适合的矩形将始终是相同的,那么管理复杂的暂停屏幕UI会更容易。

    为了让UI看起来非常清晰,只需要很少的努力,我就可以在~200-250dpi的手机屏幕上以像素到像素的大小生成它,然后给它进行三线性过滤。

答案 2 :(得分:1)

相机就像眼睛一样,显示出所见。 视口仅决定如何呈现相机观察到的物体。 例如,如果您有一个使用非常小的精灵的游戏,并且决定将其放在大屏幕上,则图像将非常小。那就是视口进入的地方。它的任务仅仅是正确地“ Widen”图像,因此您不必担心不同的屏幕分辨率。

P.S。

  • 我知道我的答案有点晚了,它可能过于简单了,但我希望它对初学者有所帮助。我想明确地说我自己不是专家。