我想制作一款游戏,我需要涉及原生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;
}
}
}