2015-06-30 3 views
1

У меня есть приложение для libgdx. Он отлично работал как на Android, так и на IOS, когда я использовал версию libgdx 1.1.4 и robovm 1.0.0.Beta. Недавно я обновился до libgdx 1.6.3 и robovm 1.4. Теперь версия для Android работает нормально, но есть небольшое сбои при использовании приложения IOS. Проблема в том, что если я приостанавливаю приложение, нажимая кнопку «домой», а затем возобновляю его, я получаю черный экран. Приложение не разбивается. Я ничего не вижу в журналах.robovm blackscreen после возобновления на IOS

Есть ли у кого-нибудь идеи, что может быть?

Я бы очень признателен за любую помощь. Заранее спасибо.

__UPDATE__

Что поразило меня является тот факт, что, когда я возвращаюсь в игру, ни один из методов резюме (ни один в классе XXXGame, ни в классе XXXScreen) не вызывается. Чтобы быть точным, у меня есть записи журналов во всех этих методах, чтобы увидеть, как идет поток программ. Я вижу журналы, когда я приостановил игру, но ничего, когда я ее возобновляю.

Это выглядит фундаментальной проблемой, поскольку, как вы знаете, метод возобновления является частью методов жизненного цикла libgdx и должен быть вызван независимо от того, что. Проблема не может быть на стороне libgdx, потому что приложение отлично работает на Android. Итак, мне интересно, что-то не так на стороне robovm. Я что-то там пропал?

__UPDATE2__

Я создал новый libgdx проект, используя графический интерфейс, чтобы выяснить, если же проблема возникает на платформе IOS. Похоже, pause-resume-pause-resume отлично работает в новом проекте. Поэтому я начал сравнивать новый проект с моим. Мой класс игры наследуется от com.badlogic.gdx.Game, но класс игры нового проекта реализует com.badlogic.gdx.ApplicationAdapter. Я изменил его, чтобы они совпадали. Он не нарушил новый проект.

В реализации по умолчанию отсутствовал метод возобновления класса Game. Поэтому я добавил следующее:

@Override 
    public void resume() { 
//  super.resume(); 
     Gdx.app.log("Testing", "resume"); 
    } 

К моему удивлению, в журналах, я вижу два набора резюме сообщений следующим образом:

2015-07-01 08:05:52.435 IOSLauncher[54152:2661071] [debug] IOSApplication: created 
2015-07-01 08:05:52.706 IOSLauncher[54152:2661071] [debug] IOSApplication: resumed 
2015-07-01 08:05:59.093 IOSLauncher[54152:2661071] [debug] IOSApplication: paused 
2015-07-01 08:05:59.093 IOSLauncher[54152:2661071] [info] Testing: pause 
2015-07-01 08:06:00.670 IOSLauncher[54152:2661071] [debug] IOSApplication: resumed 
2015-07-01 08:06:00.670 IOSLauncher[54152:2661071] [info] Testing: resume 
2015-07-01 08:06:04.587 IOSLauncher[54152:2661071] [debug] IOSApplication: paused 
2015-07-01 08:06:04.587 IOSLauncher[54152:2661071] [info] Testing: pause 
2015-07-01 08:06:06.640 IOSLauncher[54152:2661071] [debug] IOSApplication: resumed 
2015-07-01 08:06:06.640 IOSLauncher[54152:2661071] [info] Testing: resume 
2015-07-01 08:06:09.300 IOSLauncher[54152:2661071] [debug] IOSApplication: paused 
2015-07-01 08:06:09.300 IOSLauncher[54152:2661071] [info] Testing: pause 

Я не был уверен, где это IOSLauncher [54152: 2661071 ] [debug] IOSApplication: возобновлена ​​ строка была зарегистрирована. Я прокомментировал super.resume() в методе, чтобы предотвратить это, но это не помогло.

Я проверил свое собственное приложение, чтобы увидеть, если я получаю что-то похожее на IOSLauncher [54152: 2661071] [отладка] IOSApplication: возобновился, но я не мог.

Пока я играл с кодом и документировал, что я здесь делаю, я нашел проблему. Я отправлю его здесь в ближайшее время.

+0

Вы используете FrameBuffers и генерируете их в режиме изменения размера или создания? – Tenfour04

+0

@ Tenfour04 Спасибо за ваше время. Но нет, я не использую FrameBuffers. – Alp

+0

простой способ найти, является ли проблема libgdx или robovm для сборки с libgdx 1.6.3 и robovm 1.0.0.Beta. Если проблема исчезла, Robovm, иначе это libgdx. –

ответ

1

Я нашел проблему. Я собираюсь задокументировать его здесь, надеясь, что это может сэкономить время кому-то другому.

Ниже методов из IOSLauncher.java (в проекте IOS)

@Override 
    public void didBecomeActive (UIApplication application) { 
     FacebookManager.getInstance().handleDidBecomeActive(application); 
    } 


    @Override 
    public void willTerminate (UIApplication application) { 
     FacebookManager.getInstance().handleWillTerminate(application); 
    } 

выше код используется для хорошо работать без сбоев на более ранней версии libgdx/robovm.На самом деле я сделал то, что упоминалось в robovm IOS bindings. Однако сейчас это не так. Ниже приведены изменения в этих методах:

@Override 
    public void didBecomeActive (UIApplication application) { 
     super.didBecomeActive(application); 
     FacebookManager.getInstance().handleDidBecomeActive(application); 
    } 


    @Override 
    public void willTerminate (UIApplication application) { 
     super.willTerminate(application); 
     FacebookManager.getInstance().handleWillTerminate(application); 
    } 

Я благодарю всех, кто не спешил и поделился своими ценными комментариями по этому вопросу.

Смежные вопросы