模块概述

介绍

LibGDX 统一提供了 6 个接口与操作系统进行交互,不同平台的后端对这些接口分别进行了实现。

  • Application: 代表一个游戏应用的实例,通常在平台的启动器中被实例化并启动API客户端(core 子项目可以看做是 API 客户端)。该接口实例会将应用程序层面的事件通知API客户端,比如窗口大小的改变。Application 还提供了日志输出系统和各种查询方法,例如内存的使用情况,操作系统版本信息,获取系统剪贴板等。
  • Input: 通知 API 客户端用户的输入,例如鼠标点击,键盘按键按下,触摸屏幕和传感器事件。同时还支持轮询和事件驱动处理。
  • Graphics: OpenGL ES 2.0 接口。还提供查询帧率,渲染时间步,获取屏幕宽高等方法。
  • Files: 通过提供方便的读/写操作方法(不管介质为何),对所有平台的文件进行抽象访问。
  • Audio: 可用于创建音效和音乐实例,提供重放音效和音乐的方法,同时可以直接访问 PCM 音频的输入输出设备。
  • Net: 提供执行网络操作的方法,例如简单的 HTTP get 和 post 请求,以及 TCP 服务器/客户端套接字通信。

下图显示了一个简单的游戏架构中的模块: libgdx模块

下面的部分简要描述了每个模块,为每个模块提供了最常用的示例:

Input

Input 模块支持在每个平台上轮询不同的输入状态。它可以检测每个按键、触摸屏和加速度传感器的状态。在桌面上,触摸屏被鼠标取代,而加速度传感器不可用。

它还提供了注册输入处理器以使用基于事件的输入模型的方法。

下面的代码示例如果触摸(或鼠标点击着)事件正在进行,则将获取当前的触摸坐标:

if (Gdx.input.isTouched()) {
  System.out.println("Input occurred at x=" + Gdx.input.getX() + ", y=" + Gdx.input.getY());
}

同理,所有支持的输入方法都可以被轮询和处理。

Graphics

图形模块抽象了与 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

Files模块提供了一种访问文件的通用方法,而不管平台如何。它使读写文件变得容易。由于平台安全性的限制,文件编写存在一定的局限性。

下面的示例从 $APP _ dir/assets/textures 目录中的文件加载一个纹理。

Texture myTexture = new Texture(Gdx.files.internal("assets/textures/brick.png"));

这是一个非常强大的抽象层应用程序,它可以同时在 Android 和桌面上运行。

Audio

音频模块使音频文件的创建和播放极其简单。它还可以直接访问声音硬件。它处理两种类型的声音文件: 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);

Net

网络模块为游戏网络提供了有用的功能,可以用来添加多人游戏,发送玩家到您的网站,或执行其他网络任务。这些特性可以跨多个平台使用,尽管有些平台可能需要额外的考虑或缺少某些特性。

网络模块包括可配置的 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);