1

そのため、 SimpleAudioEngine を使用して Cocos2D ゲームでいくつかの効果を再生しようとしていますが、それらを追加した後、バックグラウンド (マルチタスク) になるとアプリがクラッシュします。インターネットでこの問題を検索しましたが、見つけたすべての解決策がうまくいきませんでした。私が見つけたのは、バックグラウンドでアプリが何らかの形でサウンドを再生しようとしているために、この問題が発生することです。

コンソールに表示されます(これは、他の人が見つけたのと同じエラーです):

sgx エラー (バックグラウンド GPU アクセスは許可されていません):

もう1つのことは、シミュレーターでアプリを実行したり、慎重にデバッグしながらデバイスで実行したりしても(アプリの実行中にXCodeで1行ずつ実行すると)、これは起こりません。

4

5 に答える 5

2

私はちょうどこの問題を抱えていました。アプリが実行中かバックグラウンドかを確認する bool を使用して、アプリがフォアグラウンド ( applicationWillEnterForeground ) になったときに true に設定し、アプリがバックグラウンド ( applicationDidEnterbackground ) になったときに false に設定することで解決しました。したがって、bool を使用すると、アプリがバックグラウンドにあるかどうかを確認できます。バックグラウンドにある場合は、EAGLView の drawView 関数を終了するだけです (したがって、エラーの原因となったグラフィックス レンダリングは行われません)。

私は非常にドッジ プログラマーですが、その方法は私にはうまくいきました。サウンドなどをアンロードしてリロードする必要はなく、アプリはマルチタスク XD になりました。

于 2010-11-08T08:58:28.260 に答える
1

私はこれを経験していました。私のアプリケーションがフォアグラウンドに再入したときの約25%でした。あなたのように、私が音を取り除くと、問題はなくなりました。それが私がここであなたの質問に出くわした方法です。

私はこれに対する解決策を見つけたかもしれません。無関係のように見える変更を加えましたが、問題は解決したようです。これで、アプリがバックグラウンドに入ると、メインのスケジュールされたタイマーが無効になります。アプリがフォアグラウンドに再び入ると、タイマーを再スケジュールします(サウンドをリロードした後、バックグラウンドに入ると完全にシャットダウンします)。

これまでのところ、問題は再発していません。これが役立つかどうか知りたいです。

于 2010-11-06T11:05:13.283 に答える
0

私のアプリケーションでも同じ問題が発生し、調べるのに約 4 時間かかりました。バックグラウンドへの移行は 1 回目は問題ありませんでしたが、2 回目はアプリケーションがクラッシュしました。OpenGL に関連する短いエラー メッセージが表示されます。同じ質問がありました: オーディオがグラフィックスをクラッシュさせる方法。しかし、それは音声の問題ではなく、通知の問題でした...

フォアグラウンドに移動すると、カスタム レベル メーター クラスに 2 つのタイマーが作成されることがわかりました。UIApplicationWillEnterForegroundNotificationUIApplicationWillResignActiveNotificationを登録しました。すると、通知のみで登録したので、バックグラウンドで無効になったのは1つだけでした...

通知をカウントする必要があります。

于 2013-12-26T05:18:02.993 に答える
0

オーディオ関係で間違いないですか?「バックグラウンド gpu アクセス」は、OpenGL を使用しているように聞こえます。

于 2010-10-02T14:38:00.003 に答える