我正在寻找一个游戏,我需要涉及原生的Android sdk功能,如吐司,对话,在应用计费,其他谷歌Api,gcm ..等 当我构建工具应用程序并且使用动画和非常简短的表面视图时,我对android sdk非常有经验。
然而,我已经研究过libdgx并且看起来很有希望,但我找到的唯一缺点是"与Android原生sdk"不太容易集成。也就是说,除非我错过它,否则我无法开始自己的活动或调用原生api
所以我想知道,在这种情况下我应该使用libgdx还是应该使用原生路线?
谢谢
答案 0 :(得分:4)
如果您确定不打算定位其他平台,可以将代码从默认核心项目移到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;
}
}
}