游戏应用的starter启动类是唯一需要编写的特定于平台的代码。对于每个目标平台,一段代码将实例化由平台后端提供的 Application 接口的具体实现。
对于桌面来说,如果使用 Lwjgl做后端的话,则可能是这样的:
public class DesktopStarter {
public static void main(String[] argv) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
new LwjglApplication(new MyGame(), config);
}
}
对于安卓,则相应的启动类可能如下:
public class AndroidStarter extends AndroidApplication {
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
initialize(new MyGame(), config);
}
}
这两个类通常分别存在于不同的模块中,例如,drop-desktop和 drop-androiud 项目。
应用程序的实际代码位于实现 ApplicationListener 接口的类中(在上面的示例中是 MyGame)。这个类的一个实例被传递给每个后端的 Application 实现的各自的初始化方法(参见上面)。然后,应用程序将在适当的时候调用 ApplicationListener 的方法(参见生命周期)。
一个 LibGDX 应用有意义明确的生命周期方法,用于调节应用的各种状态。LibGDX 应用的生命周期事件方法定义在 ApplicationListener 接口中,开发人员通过在实现该接口类中处理生命周期事件方法的调用。ApplicationListener 接口的实现类,可以理解为一个游戏的实例,游戏最高级别的控制器,也是游戏主程序开始执行的入口类,在平台启动器中实例化实现该接口的实现类启动游戏。
实现该接口的类如下:
import com.badlogic.gdx.ApplicationListener;
/**
* 游戏主程序的启动入口类
*/
public class MainGame implements ApplicationListener {
@Override
public void create() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void render() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
}
}
在游戏开发中如果只需要使用到生命周期方法中的几个方法,MainGame 可以继承 ApplicationAdapter 抽象类,ApplicationAdapter 空实现了 ApplicationListener 接口的所有方法。