在RoboVM中测试我的libGDX应用程序,我遇到了一个主要问题。当我暂停我的应用程序(通过实际进入主屏幕或通过Facebook发送应用程序邀请)然后返回我的应用程序时,我的游戏类消失了。好像它没有在resume()方法上正确存储数据。首先我虽然有一个我的AssetLoader的问题,但经过一些调试我发现情况更糟。类和形状的实际实例消失。好像他们从未存在过。
在谷歌搜索问题后,我发现它可能与IOSGraphics有关,但我没有设法解决问题。
我的IOSLauncher看起来像这样,我已经删除了Facebook& Google AdMob特定代码。
protected IOSApplication createApplication() {
IOSApplicationConfiguration config = new IOSApplicationConfiguration();
config.useAccelerometer = true;
config.useCompass = true;
config.orientationPortrait = true;
config.orientationLandscape = false;
return new IOSApplication(new Game(this), config);
}
@Override
public boolean didFinishLaunching(UIApplication application,
UIApplicationLaunchOptions launchOptions) {
FBSDKApplicationDelegate.getSharedInstance().didFinishLaunching(application, launchOptions);
initialize();
return true;
}
public void initialize() {
//...
}
public static void main(String[] argv) {
NSAutoreleasePool pool = new NSAutoreleasePool();
UIApplication.main(argv, null, IOSLauncher.class);
pool.close();
}
@Override
public void showAds(boolean show) {
//...
}
@Override
public void shareOnFacebook() {
//...
}
@Override
public void inviteFriends() {
//....
}
@Override
public boolean openURL(UIApplication application, NSURL url,
String sourceApplication, NSPropertyList annotation) {
super.openURL(application, url, sourceApplication, annotation);
return FBSDKApplicationDelegate.getSharedInstance().openURL(
application, url, sourceApplication, annotation);
}
@Override
public void didBecomeActive(UIApplication application) {
super.didBecomeActive(application);
FBSDKAppEvents.activateApp();
}
@Override
public void willResignActive(UIApplication application) {
super.willResignActive(application);
}
@Override
public void willTerminate(UIApplication application) {
super.willTerminate(application);
}
}
答案 0 :(得分:0)
这听起来类似于我曾遇到的线程错误。我通过推迟resize
和resume
来修复它,但我不确定它是否会对您的情况有所帮助。像这样:
private boolean needResize, needResume;
private void resize (int width, int height){
needResize = true;
}
private void deferredResize ();
if (!needResize) return;
needResize = false;
int width = Gdx.graphics.getWidth();
int height = Gdx.graphics.getHeight();
//move your resize code here
}
private void resume (){
needResume = true;
}
private void deferredResume (){
if (!needResume) return;
needResume = false;
//move your resume code here
}
public void render (){
deferredResize();
deferredResume();
//...
}
答案 1 :(得分:0)
我建议您开始寻找RoboVM的替代方案以避免将来出现更多问题,因为Robovm被Microsoft Xamarin收购(可悲但真实)并且不再维护该框架。许可证密钥(使用Libgdx)将继续有效,直到2017年4月17日,RoboVM将无法进一步更新,无论是新功能还是错误修复。
据我所知,Libgdx将在未来几周内切换到Multi-OS引擎作为新创建的libGDX项目的默认iOS后端。
答案 2 :(得分:0)
经过几天充满头痛后,我找到了解决方案!
LifeCycle方法,如暂停和放大简历,隐藏& show并不总是被调用当它们被调用时,因此数据不能正确存储。这个问题可以彻底打破你的游戏。
这个问题只发生在iOS平台上测试我的游戏时,主要是在这种情况下我打开了第三方应用程序Facebook。但是在Android上没有发现这样的事情。
我在iOS版本上唯一改变的是手动调用所提到的方法,以确保它在必要时始终暂停和恢复。