Libgdx 尝试使用一组接口来抽象以隐藏这些平台差异。libgdx所支持的每个平台,都有一个所谓的后台实现这些接口。应用开发者不用直接关心这些后台,相反是针对这些接口编程。
Libgdx 目前支持4种后台:
作为核心,libgdx由5个接口组成,这些接口提供与操作系统交互的接口。每个后台都实现了这些接口。
唯一需要编写的进行平台指定的代码,就是所谓的启动类。针对每一个平台,需要一段代码实现化一个由该平台的后台提供的应用程序接口的具体实现。对于桌面应用而言如下,使用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 访问文件实现等等。