我正在寻找制作游戏,我需要涉及原生 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);
}
//...
}
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)
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |