博客文章

Cocos2d-x IOS版本在终止应用时崩溃

作者: 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