1

所以我尝试使用 SimpleAudioEngine 在我的 Cocos2D 游戏中播放一些效果,但是在我添加它们之后,我的应用程序在进入后台(多任务处理)时崩溃。我在互联网上搜索了这个问题,但我发现的所有解决方案都对我不起作用。我确实发现这个问题发生是因为我的应用程序在后台播放时以某种方式尝试播放声音。

在控制台中它向我显示(这是我发现其他人遇到的相同错误):

sgx 错误(不允许后台 gpu 访问):

还有一件事,当我在模拟器上运行我的应用程序时,甚至在我的设备上仔细调试(在应用程序运行时与 XCode 逐行运行)时,这不会发生。

4

5 回答 5

2

我刚遇到这个问题。我通过使用 bool 来检查应用程序是否正在运行或在后台解决它,当应用程序进入前台 (applicationWillEnterForeground) 时我设置为 true,当应用程序进入后台 (applicationDidEnterbackground) 时我设置为 false。因此,使用 bool 您可以判断应用程序是否在后台,如果是,我只需退出 EAGLView 中的 drawView 函数(因此不执行任何导致错误的图形渲染)。

我是一个非常躲闪的程序员,但这种方法对我有用,我希望它对其他人有用。我不需要卸载和重新加载我的声音或任何东西,我的应用程序现在有 Multitasking XD

于 2010-11-08T08:58:28.260 回答
1

在我的应用程序重新进入前台的大约 25% 的情况下,我遇到了这种情况。像你一样,当我删除声音时,问题就消失了。这就是我在这里遇到你的问题的方式。

可能已经找到了解决方案。我做了一个看似无关的更改,但问题似乎已经消失了。现在,当我的应用程序进入后台时,我的主计划计时器无效。当我的应用程序重新进入前台时,我会重新安排计时器(在重新加载我的声音后,我在进入后台时完全关闭)。

到目前为止,问题还没有回来。我很想知道这是否有帮助。

于 2010-11-06T11:05:13.283 回答
1

我刚刚解决了这个问题。以下是我的案例出了什么问题,从我从本页的其他答案和评论中可以看出,还有许多其他人的案例:

默认情况下,当我开始我的项目时,CCDirector::sharedDirector()->pause(); CCDirector::sharedDirector()->resume(); 都被调用了两次,一次分别由AppController.mm中的(void)applicationWillResignActive:(UIApplication *)(void)applicationDidBecomeActive:(UIApplication *)调用,一次分别由AppDelegate::applicationDidEnterBackground()AppDelegate::applicationWillEnterForeground() 调用AppDelegate.cpp中。

确保这些方法只在 AppController.mm 中被调用一次。在 AppDelegate.cpp 中,请确保您正在调用CCDirector::sharedDirector()->stopAnimation(); 代替CCDirector::sharedDirector()->pause(); CCDirector::sharedDirector()->startAnimation(); 代替CCDirector::sharedDirector()->resume(); .

希望这对陷入这种糟糕情况的其他人有所帮助!

于 2014-01-30T17:04:28.280 回答
0

你确定它与音频有关?“后台 gpu 访问”听起来像是在使用 OpenGL。

于 2010-10-02T14:38:00.003 回答
0

我在我的申请中遇到了同样的问题,花了大约 4 个小时才找到答案。第一次去后台没问题,但第二次崩溃应用程序。带有与 OpenGL 相关的简短错误消息。我有同样的问题:音频如何使图形崩溃。但这不是音频的问题,而是通知的问题……

我发现进入前台是在我的自定义电平表类中创建 2 个计时器。我已经注册了UIApplicationWillEnterForegroundNotificationUIApplicationWillResignActiveNotification。然后,进入后台只使一个无效,因为我只在通知上注册......就是这样!

需要计算它的通知!

于 2013-12-26T05:18:02.993 回答