Приложение падает на фоне из-за SimpleAudioEngine - PullRequest
1 голос
/ 02 октября 2010

Итак, я пытаюсь воспроизвести некоторые эффекты в моей игре Cocos2D, используя SimpleAudioEngine, но после их добавления мое приложение вылетает, когда оно переходит в фоновый режим (многозадачность). Я искал эту проблему в Интернете, но все решения, которые я нашел, не работали для меня. Я обнаружил, что эта проблема возникает из-за того, что мое приложение каким-то образом пытается воспроизводить звуки в фоновом режиме.

В консоли это показывает мне (что является той же ошибкой, которую я обнаружил у других людей):

ошибка sgx (фоновый доступ к gpu запрещен):

И еще одна вещь, когда я запускаю свое приложение на симуляторе или даже на моем устройстве во время тщательной отладки (построчно с XCode во время работы приложения), этого не происходит.

Ответы [ 5 ]

2 голосов
/ 08 ноября 2010

У меня только что была эта проблема. Я решил эту проблему, установив bool для проверки, запущено ли приложение или в фоновом режиме, для которого я установил значение true, когда приложение переходит на передний план (applicationWillEnterForeground), а для false - для приложения, которое переходит в фоновый режим (applicationDidEnterbackground). Таким образом, используя bool, вы можете определить, находится ли приложение в фоновом режиме, и если это так, я просто выхожу из функции drawView в EAGLView (таким образом, не делая никакой визуализации графики, которая вызывала ошибку).

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

1 голос
/ 30 января 2014

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

По умолчанию, когда я начинал свой проект, CCDirector:: sharedDirector () -> pause (); и CCDirector :: sharedDirector () -> resume (); вызывались дважды, один раз (void) applicationWillResignActive :(UIApplication *) и (void) applicationDidBecomeActive: (UIApplication *) соответственно в AppController.mm и один раз AppDelegate :: applicationDidEnterBackground () и AppDelegate :: applicationWillEnterForeground () соответственно в AppDelegate.cpp .

Убедитесь, , что эти методы вызываются только один раз в AppController..mm.Вместо этого в AppDelegate.cpp убедитесь, что вы вызываете CCDirector :: sharedDirector () -> stopAnimation (); вместо CCDirector :: sharedDirector () -> pause (); и CCDirector :: sharedDirector () -> startAnimation (); вместо CCDirector :: sharedDirector () -> resume (); .

Надеюсь, что этополезно всем, кто застрял в этой дерьмовой ситуации!

1 голос
/ 06 ноября 2010

Я испытывал это примерно в 25% случаев, когда мое приложение снова выходило на передний план.Как и вы, когда я убрал звуки, проблема ушла.Вот как я наткнулся здесь на ваш вопрос.

I может нашел решение для этого.Я сделал то, что кажется несвязанным изменением, но проблема, кажется, ушла.Теперь, когда мое приложение переходит в фоновый режим, я отключаю свой основной запланированный таймерКогда мое приложение снова выходит на передний план, я затем перепланирую таймер (после перезагрузки моих звуков, которые я полностью отключил при входе в фон).Мне было бы интересно узнать, поможет ли это.

0 голосов
/ 26 декабря 2013

У меня была та же проблема в моем приложении, и я потратил около 4 часов, чтобы выяснить это.В первый раз с фоном все было в порядке, но во второй раз вылетало приложение.С коротким сообщением об ошибке, связанным с OpenGL.У меня были те же вопросы: как звук может разбить графику.Но это был не вопрос аудио, а вопрос уведомлений ...

Я обнаружил, что на переднем плане создается 2 таймера в моем классе индикатора уровня.Я зарегистрировал UIApplicationWillEnterForegroundNotification и UIApplicationWillResignActiveNotification .Затем, отправка фона аннулировала только одну, поскольку я зарегистрировался только по уведомлению ... Вот и все!

Нужно посчитать его уведомления!

0 голосов
/ 02 октября 2010

Вы уверены, что это связано со звуком?"фоновый доступ к GPU" звучит так, как будто он использует OpenGL.

...