《libGDX移动游戏开发从入门到精通》一2.2 模块

    xiaoxiao2024-02-22  118

    本节书摘来异步社区《libGDX移动游戏开发从入门到精通》一书中的第2章,第2.2节,作者: 黄俊东 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    2.2 模块

    libGDX这个游戏引擎的有一个特点就是架构清晰、组成模块化。那么现在我们就来学习一下libGDX这个游戏都由哪些模块组成,这些模块分别对外提供什么功能。

    2.2.1 libGDX模块组成的图示

    libGDX由数个模块组成,它们分别为一个游戏的各个步骤提供了服务与支持。这些主要模块在一个游戏中的典型架构如图2.7所示。

    由图2.7可以看出,libGDX主要由Input、Files、Graphics、Audio这几个模块组成,以及图2.7中没有显示出来的Net模块。它们分别对应了libGDX中的输入操作、文件操作、2D/3D等图形绘制、音频操作及网络操作。

    这些可以在源码中体现出来。打开Gdx的源码,可以看到,Gdx这个类中简单到只有数个成员变量,这些成员变量在libGDX中分别负责一个模块。例如audio负责音频模块。

    public class Gdx {    public static Application app;//提供了众多方便的方法    public static Graphics graphics;//图形渲染模块    public static Audio audio;//音频模块    public static Input input;//输入模块    public static Files files;//文件模块    public static Net net;//网络模块    public static GLCommon gl;    public static GL10 gl10;    public static GL11 gl11;    public static GL20 gl20;    public static GLU glu; }

    以上所涉及的各个模块都会在以后的相应章节展开讲解。

    2.2.2 libGDX模块的分析

    通过2.2.1小节,我们对libGDX的模块组成有了一个大体的了解,这一小节来分析libGDX中几个主要模块的作用。 

    1.Application:在这个接口中提供了很多方便的方法。包括获取程序目前运行环境、目前程序所占用的内存大小等。

    2.Graphics:利用OpenGL ES 将图片绘制到屏幕上。它抽象了与GPU之间的通信,并且提供了方便的方法去获取一个OpenGL ES的封装实例。而这个封装的实例可不可用取决于底层硬件是否支持。如果底层硬件不支持,那么返回来的实例将会是null值。例如,可以通过以下代码获取一个OpenGL 2.0的实例。

    GL20 gl = Gdx.graphics.getGL20 ();这个方法会返回一个实例,使用这个实例就可以将图片绘画到屏幕上。但是,如果底层硬件不支持,那么返回来的值会是null。

    当获取到一个OpenGL ES的实例以后,可以使用这个实例去完成一定的事情,如清屏:

    gl.glClearColor(1f, 0.0f, 0.0f, 1); gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    3.Audio:为各个平台音频文件的提供了一种统一、方便的操作。它通过Sound、Music来操作音频文件。支持的音频文件的格式有:WAV、MP3和OGG。

    以下代码演示了怎么通过Audio去操作音频文件:

    //利用音频文件生成一个Music类的实例 Music music = Gdx.audio.newMusic(Gdx.files.getFileHandle("data/myMusicFile.mp3", FileType.Internal)); music.setVolume(0.5f);//设置音量的大小 music.play();//开始播放音乐 music.setLooping(true);//将音乐设置成不断循环

    4.Input:用于处理输入操作。libGDX通过Input为各个平台(如Android、IOS、Desktop)提供统一的输入模型和处理机制。它支持键盘输入、单击屏幕、加速度传感器以及鼠标(对Desktop来说)。

    举例:以下代码就是通过Input模块来获取当前单击的位置。

    if (Gdx.input.isTouched()) {//如果监听到单击事件  System.out.println("刚刚单击的位置的横坐标是 x=" +Gdx.input.getX() + ",纵坐标是 y=" + Gdx.input.getY()); }

    5.Files:文件操作。为各个平台提供了一种统一、简单的文件读写的方式,而不用去处理各种平台之间的差异。它让开发者可以更简单地去读写文件。但是出于平台的安全性的考虑,它在“写”操作上也有一定的限制。

    以下代码演示了使用Files模块提供的功能,利用一个assets目录下的图片资源文件来生成一个Texture类的实例:

    Texture myTexture = new Texture(Gdx.files.internal(“assets/texture/brick.png”));

    6.Networking:给游戏提供基本的网络支持。在一段时间内,libGDX更多地适用于弱联网游戏。但现在libGDX对网络方面已经提供了越来越多的支持。

    相关资源:libGDX游戏开发入门指南_13845649 高清扫描版
    最新回复(0)