Libgdx 或本机为此

Sna*_*ake 1 android libgdx

我正在寻找制作游戏,我需要涉及原生 android sdk 功能,例如 Toast、对话框、应用程序计费、其他谷歌 Api、gcm ..等我在构建工具应用程序和使用动画时对 android sdk 非常有经验和非常简单的表面视图。

然而,我已经研究了 libdgx 并且看起来很有希望,但我发现唯一的缺点是“与 Android 原生 sdk 的集成并不那么容易”。即,除非我错过了它,否则我不能只是开始我自己的活动或调用本机 api

所以我想知道,在这种情况下我应该使用 libgdx 还是应该使用本地路由?

谢谢

Ten*_*r04 5

如果您确定不打算针对其他平台,您可以将您的代码从默认核心项目移动到您的 Android 项目中,然后从那里开始工作,随意调用任何 API。但是您将失去在桌面上进行测试的能力。

为了保持对其他平台的可移植性和在桌面上测试的能力,您可以创建一个接口,列出您想要调用的所有 Android API 方法。将此接口的实例传递到您的 Android 项目中的游戏构造函数中,以便您的游戏可以间接调用它们。您的桌面项目可以使用空或系统日志记录方法传入此接口的实例。

例子:

public class MyGdxGame extends ApplicationAdapter {

    public interface AndroidAPIAdapter {
        public void makeToast(String msg);
        public void startActivity(int activityNumber);
    }

    AndroidAPIAdapter androidAPIAdapter;

    public MyGdxGame (AndroidAPIAdapter androidAPIAdapter){
        this.androidAPIAdapter = androidAPIAdapter;
    }

    //Call this from game code in core project as needed
    public void makeToast(String msg){
        if (androidAPIAdapter!=null)
            androidAPIAdapter.makeToast(msg);
    }

    //Call thisfrom game code in core project as needed
    public void startActivity(int activityNumber){
        if (androidAPIAdapter!=null)
            androidAPIAdapter.startActivity(activityNumber);
    }

    //...
}
Run Code Online (Sandbox Code Playgroud)

和:

public class MyGameActivity extends AndroidApplication implements AndroidAPIAdapter {

    public static final int ACTIVITY_SETTINGS = 0;
    public static final int ACTIVITY_ABOUT = 1;
    //etc.

    public void onCreate (Bundle bundle) {
        super.onCreate(bundle);

        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        config.useImmersiveMode = true;
        initialize(new MyGdxGame(this), config);
    }

    @Override
    public void makeToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT);
    }

    @Override
    public void startActivity(int activityNumber) {
        switch (activityNumber){
            case ACTIVITY_SETTINGS:
                startActivity(this, MySettingsActivity.class);
                break;
            case ACTIVITY_ABOUT:
                startActivity(this, MyAboutActivity.class);
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)