LibGDX超越基础

在上一篇博客文章中,我介绍了如何设置libGDX项目以及如何运行一个非常基本的示例。 在文章的后半部分,我介绍了一些与libGDX相关的概念,例如轮询,坐标和增量时间。 在这篇博客文章中,我打算扩展上一篇文章的后半部分,并介绍一些对libGDX重要的其他类和概念。

游戏状态经理

典型的游戏不仅仅限于单个屏幕或特定级别。 它通常具有多个级别,菜单和标题屏幕。 为了在libGDX中实现这种游戏,我们需要研究一个称为游戏状态管理器的概念。

在大多数游戏引擎中,有一种叫做游戏循环的东西,而libGDX也有一个。 在libGDX中,您有一个名为“ render()”的方法。 每次libGDX尝试更新屏幕上的内容时都会调用此方法。 您的游戏逻辑通常包含在此处。 例如,您要检查向左键是否按下,是否向左移动播放器,每次计算机尝试更新屏幕时都需要检查此逻辑,因此如果手指在向左键上,则移动是显示。

游戏状态管理器管理状态(如图)。 将状态视为屏幕,或者甚至更好地将它们视为render方法的不同版本。 游戏状态管理器可以换出这些版本的render方法,以在屏幕上显示不同的内容,并在后台运行不同的游戏逻辑。 假设您显示了一个主菜单,当您单击“播放”按钮时,将有一个呼叫发送到游戏状态管理器以将状态切换为播放状态,并且还将切换渲染方法,从而导致不再显示该菜单,而是无论播放状态的render方法包含什么。

LibGDX提供了两个类来帮助您创建游戏状态管理器系统。 游戏和场景。 游戏是一个抽象类,您的游戏状态管理器类将对其进行扩展。 在Game类中要注意的重要一点是,它具有一个Scene类型的变量(我们将在稍后介绍),并且在其render方法中,它将Scene的render方法称为“ Scene.render()”。为所有状态类实现的接口。 它要求这些类包含一个render方法。 因此,当您想切换状态时,只需重新分配Game类的Scene变量,Game类就会开始从该特定状态类调用render方法。

重要班

Texture类

此类对图像进行解码,以便可以将其加载到GPU内存中。 本质上,您是从您的Assets文件夹中为纹理对象分配了一个图像,这使得OpenGL可以理解该图像并将其绘制到屏幕上。

TextureRegion类

此类保存纹理内矩形的坐标以及对纹理对象的引用。 在libGDX中,您希望在一个纹理上拥有尽可能多的游戏资源。 这是因为将多个纹理(认为图像)发送到OpenGL进行渲染的效率较低,而仅将其中一个的某些区域(TextureRegion)有效。 因此,将所有游戏资产都保存在一个纹理中,纹理区域定义了可以发送到要渲染的屏幕的单张图片的区域。 纹理区域的数组对于动画很有用。

动画课

该类使您能够为2D动画定义一组帧,以及设置每个帧之间的时间量以及设置此动画是否循环。 可以给动画提供一系列纹理区域以进行播放。 使用animation类中的方法,您可以发送经过的时间(以秒为单位),该方法将检查是否经过了足够的时间以切换到下一帧。 如果经过了足够的时间,则返回下一帧(纹理区域);否则,返回当前帧(纹理区域)。

雪碧课

Sprite可以保存纹理,纹理区域或动画及其在屏幕上的位置。 它还允许您指定纹理/纹理区域的宽度和高度。 Sprite类可将图像放在屏幕上。 它通常与提供图像的动画方法一起使用,以便当前帧在屏幕上的正确位置显示。

我希望它能提供一些有关libGDX重要概念和类的更多信息。 谢谢阅读!