后台
Libgdx 尝试使用一组接口来抽象以隐藏这些平台差异。libgdx所支持的每个平台,都有一个所谓的后台实现这些接口。应用开发者不用直接关心这些后台,相反是针对这些接口编程。
Libgdx 目前支持4种后台:
- Lwjgl: 建立在 Lightweight Java Gaming Library(轻量java游戏库), 这是一个围绕特定于平台的窗口工具包的JNI 封装 , 其中包括OpenGL 和 OpenAL 。该后台运行于Windows, Linux 和 Mac OS X,需要一个可用的Java运行时环境并安装了至少支持OpenGL 1.5的显卡。
- Jogl: 建立在 Jogl 1.1, 另一个围绕OpenGL,Swing 和绑定于LWJGL的OpenAL的一个JNI封装。同样运行于Windows, Linux 和 Mac OS X。现在更推荐Lwjgl后台, 因为它更稳定一些,尤其是在全屏应用中。
- Android: 建立在 Android APIs.
- HTML5: 建立在 GWT, SoundManager 2 和更新后的 GWT WebGL 和Local Storage 绑定 Quake 2 GWT port. 该后台将把Java代码编译为纯的Javascript代码。该后台产品运行于Chrome, Safari, Firefox 和最新的Opera版本以及其他任何支持WebGL的浏览器。因为GWT与Javascript的性质, 使用此后台时仅有很少限制,请参考https://github.com/libgdx/libgdx/tree/master/backends/gdx-backends-gwt/issues.txt
模块
作为核心,libgdx由5个接口组成,这些接口提供与操作系统交互的接口。每个后台都实现了这些接口。
- Application: 运行应用程序并通知API客户端应用层事件,例如 调整窗口。为如内容使用状况等提供日志工具与查寻方法。
- Files: 暴露平台底层的文件系统。在自定义文件处理系统顶层提供一个不同类型文件位置的抽象(不兼容Java的File类)。
- Input: 向API客户端通知用户输入事件,如:鼠标,键盘,触摸或者加速器。同时支持轮询与事件驱动处理。
- Audio: 提供播放音效与流媒体音乐以及直接访问PCM音频输入/输出设备。
- Graphics: 暴露 OpenGL ES 1.x 与2.0 (可用) and 允许查找/设置视频模式和类似操作。
启动类
唯一需要编写的进行平台指定的代码,就是所谓的启动类。针对每一个平台,需要一段代码实现化一个由该平台的后台提供的应用程序接口的具体实现。对于桌面应用而言如下,使用Lwjgl后台:
public class DesktopStarter { public static void main(String[] argv) { LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); new LwjglApplication(new MyGame(), config); } }
对于Android,相应的启动类如下:
public class AndroidStarter extends AndroidApplication { public void onCreate(Bundle bundle) { super.onCreate(bundle); AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); initialize(new MyGame(), config); } }
这两个启动类通常存在于不同的项目中,例如桌面和Android项目。Project Setup 页描述了Eclipse中这些项目的布局。
真正的应用程序代码写在一个实现了ApplicationListener接口(在上面的例子中的MyGame)的类中。该类的一个实例被传入每个后台相应的初始化方法中。接着应用程序在适当的时候调用ApplicationListener中的这些方法(seeThe Life-Cycle)。
关于启动类的详细内容请查看Application Configuration 。
访问模块
前面描述的模块可以通过Gdx class的静态域访问。这实质上是一组全局变量,它允许访问libgdx的任何模块。虽然这通常被认为是非常不好的编码实践,我们选择使用这种原理以简化在传递经常使用且在各种场合中的基础代码的引用时所带来的麻烦。
要访问如音频模块时,只需简单地编写如下代码:
// creates a new AudioDevice to which 16-bit PCM samples can be written AudioDevice audioDevice = Gdx.audio.newAudioDevice(44100, false);
Gdx.audio 是后台实现的一个引用,该后台已经在应用实例启动时初始化完成。其他模块也使用相同的方式访问,如 Gdx.app 获取应用程序,Gdx.files 访问文件实现等等。