LibGDX 统一提供了 6 个接口与操作系统进行交互,不同平台的后端对这些接口分别进行了实现。
下图显示了一个简单的游戏架构中的模块:
下面的部分简要描述了每个模块,为每个模块提供了最常用的示例:
Input 模块支持在每个平台上轮询不同的输入状态。它可以检测每个按键、触摸屏和加速度传感器的状态。在桌面上,触摸屏被鼠标取代,而加速度传感器不可用。
它还提供了注册输入处理器以使用基于事件的输入模型的方法。
下面的代码示例如果触摸(或鼠标点击着)事件正在进行,则将获取当前的触摸坐标:
if (Gdx.input.isTouched()) {
System.out.println("Input occurred at x=" + Gdx.input.getX() + ", y=" + Gdx.input.getY());
}
同理,所有支持的输入方法都可以被轮询和处理。
图形模块抽象了与 GPU 的通信,并提供了获取 OpenGL ES 包装器实例的方便方法。它负责获取 OpenGL 实例所需的所有操作代码,并处理制造商提供的所有实现。根据底层硬件的不同,包装器可能是可用的,也可能不可用。图形模块还提供了生成像素图和纹理的方法。
例如,如下代码为获取 OpenGL API 2.0的实例:
GL20 gl = Gdx.graphics.getGL20 ();
该方法将返回一个可用于在屏幕上绘制的实例。如果硬件配置不支持 OpenGL ES v2.0,则返回 null。
如下代码为清除屏幕并将其涂成红色。
gl.glClearColor(1f, 0.0f, 0.0f, 1);
gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
它总是返回 API 的特定实现(lwjgl、 jogl 或 android) ,因此游戏的核心程序不需要知道具体细节,如果得到支持,它将在整个平台范围内工作。
支持以下 API 版本: |GL Version|方法| |-|-| |2.0|Gdxgraphics.getGL20()| |3.0|Gdxgraphics.getGL30()|
要了解更多关于图形模块的信息,请查看这里的文档。
Files模块提供了一种访问文件的通用方法,而不管平台如何。它使读写文件变得容易。由于平台安全性的限制,文件编写存在一定的局限性。
下面的示例从 $APP _ dir/assets/textures 目录中的文件加载一个纹理。
Texture myTexture = new Texture(Gdx.files.internal("assets/textures/brick.png"));
这是一个非常强大的抽象层应用程序,它可以同时在 Android 和桌面上运行。
音频模块使音频文件的创建和播放极其简单。它还可以直接访问声音硬件。它处理两种类型的声音文件: Sound和Music。这两种类型都支持 WAV,mp3和 OGG 格式。
Sound实例被加载到内存中,并且可以随时回放。这是理想的游戏中的声音效果,将使用多次,如爆炸或枪声。
Music实例是来自磁盘(或 SD 卡)上文件的流。每次播放文件时,文件都会从文件流传到音频设备。
下面的代码片段从磁盘反复播放一个音频文件 myMusicFile.mp3,音量打开一半:
Music music = Gdx.audio.newMusic(Gdx.files.getFileHandle("data/myMusicFile.mp3", FileType.Internal));
music.setVolume(0.5f);
music.play();
music.setLooping(true);
网络模块为游戏网络提供了有用的功能,可以用来添加多人游戏,发送玩家到您的网站,或执行其他网络任务。这些特性可以跨多个平台使用,尽管有些平台可能需要额外的考虑或缺少某些特性。
网络模块包括可配置的 TCP 客户端和服务器套接字,并为低延迟优化了设置。还有一些方法和实用程序用于发出 HTTP 请求。其中一个实用程序是 Request Builder,它使用方法链接轻松创建 HTTP 请求。
请求生成器可以用以下代码片段来创建 HTTP 请求:
HttpRequestBuilder requestBuilder = new HttpRequestBuilder();
HttpRequest httpRequest = requestBuilder.newRequest()
.method(HttpMethods.GET)
.url("http://www.google.de")
.build();
Gdx.net.sendHttpRequest(httpRequest, httpResponseListener);
它也可以用来创建带参数的 HTTP 请求,如下:
HttpRequestBuilder requestBuilder = new HttpRequestBuilder();
HttpRequest httpRequest = requestBuilder.newRequest()
.method(HttpMethods.GET)
.url("http://www.google.de")
.content("q=libgdx&example=example")
.build();
Gdx.net.sendHttpRequest(httpRequest, httpResponseListener);