起因:这几天在Android(小米4)上测试游戏,当游戏正在加载资源场景时,如果我此时立即按下电源键锁屏,再按电源键,解锁屏,回到游戏,就会出现一个奇怪的问题,游戏内的字体糊掉了,成了一个个的小方块,部分图片及动画会出现渲染不出来。而且通过控制台可以明显看见OpenGL Error的打印。
解决:
- 首先怀疑肯定是线程里调用了OpenGL的相关代码。经查,游戏内没有出现如些的代码。由于我们用的是cocos2d-x 3.7.1,怀疑是不是该版本的BUG,看cocos2d-x Github上的ChangeLog,搜索,Google,都找不跟这种现象的相关答案。
- 找了半天。没有结果,而且游戏中是有的加载场景出现,有的加载场景不出现,好了,没办法。看中LogCat的输出,貌似看到区别了,游戏中我们监听了一个事件,叫EVENT_RENDERER_RECREATED,如果设置setEnable为false,所有的相关事件不会被触发,cocos底层也接收这些事件进一行一重置的工作。
我们的代码象这样:
std thread([=](){ cocos2d::Director::getInstance()->getEventDispatcher()->setEnabled(false); // 加载资源代码,耗时已经久,等待加载完才执行下面语句,此时关闭电源,再开启电源回到游戏,就会出现了 cocos2d::Director::getInstance()->getEventDispatcher()->setEnabled(true); })