Libgdx or native for this



我想制作一款游戏,我需要涉及原生android sdk功能,如toast、对话框、应用内计费、其他谷歌Api、gcm。。等当我构建工具应用程序时,我对android sdk非常有经验,我使用了动画和非常简短的表面视图。

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

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

感谢

如果你确定你不会以其他平台为目标,你可以将你的代码从默认的核心项目移动到你的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);
    }
    //...
}

带有:

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;
        }
    }
}

相关内容

最新更新