0

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

3 に答える 3

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();

    //...
}
于 2016-05-01T13:10:44.867 に答える
0

Robovm は Microsoft Xamarin によって買収され (悲しいことですが本当です)、フレームワークはもはや維持されていないため、RoboVM に代わるものを探し始めて、将来のさらなる問題を回避することをお勧めします。ライセンス キー (Libgdx を使用) は、2017 年 4 月 17 日まで引き続き機能します。新しい機能やバグ修正など、RoboVM の更新は行われません。

私の知る限り、Libgdx は、今後数週間で新しく作成された libGDX プロジェクトのデフォルトの iOS バックエンドとしてマルチ OS エンジンに切り替わります。

于 2016-05-01T15:30:07.177 に答える
0

頭痛に満ちた数日後、私は解決策を見つけました!

一時停止と再開、非表示と表示などの LifeCycle メソッドは、呼び出されるはずのときに常に呼び出されるとは限らないため、データが適切に保存されません。この問題により、ゲームが完全に壊れる可能性があります。

このことは、iOS プラットフォームでゲームをテストしているときにのみ発生しました。主に、この場合は Facebook であるサードパーティのアプリを開いたときに発生しました。ただし、Androidではそのようなものは見つかりませんでした。

iOS バージョンで変更した唯一のことは、前述のメソッドを手動で呼び出して、必要なときに常に一時停止して再開するようにすることでした。

于 2016-05-05T12:21:44.643 に答える