作者: andy. 时间: 2019-09-30 20:35:53
现在还是把工作中遇到的一些问题记录下来。
IOS真机调试的时候大家肯定都遇到过,通过Xcode在iPhone真机上面调试,在iPhone上面杀掉进程后,应用崩溃,Xcode这边可以看到崩溃在AudioEngine-inl.mm文件,AudioEngineImpl类的析构函数里面,具体的代码内容为:alDeleteSources(MAX_AUDIOINSTANCES, _alSources);
其实这个问题并不严重,因为毕竟在用户主动退出游戏之后。但是我们最近上TestFight的时候,发现崩溃后,苹果会提示是否将崩溃信息发送给开发者。这个时候我们才意识到,如果用户在使用的时候发现崩溃(虽然不影响游戏)的话,内心感受(整体体验)肯定是不好。就把这个问题修复了。我的做法是把alDeleteSources(MAX_AUDIOINSTANCES, _alSources);放后面一点儿,修改后为:
if (needDeleteSources) { alDeleteSources(MAX_AUDIOINSTANCES, _alSources); resetSoucesBuffer(); } #if CC_TARGET_PLATFORM == CC_PLATFORM_IOS [s_AudioEngineSessionHandler release]; #endif s_instance = nullptr;
resetSoucesBuffer的意思是将数组里面的值置为-1,也就是AL_INVALID的值。
其实alDeleteSources这个函数调与不调区别不大,况且还是在游戏结束的时候才会执行这段代码。贴一个关于同时播放过个音效的stack overflow的讨论:https://stackoverflow.com/questions/5760642/openal-how-to-play-multiple-sounds-at-the-same-time-and-mix-them