问题描述:
1.运行游戏,无问题
2.游戏点击网站链接,或进入后台,回来黑屏
3.eclipse控制台报错:
03-01 17:51:55.347: W/Adreno-ES20(8664): <1091>: GL_INVALID_OPERATION1091>
03-01 17:51:55.347: D/cocos2d-x debug info(8664): OpenGL error 0x0502 in /Applications/android/cocos2dx/cocos2dx_v2/cocos2dx/sprite_nodes/CCSprite.cpp draw 584
4.可以操作,可以进行触碰操作,反馈声音也存在,只是不显示画面,十分诡异
解决方案
本人并不能代表解决安卓下所有黑屏问题, 但是本人已查询大量的资料, 以及富有经验的 lcg_ryan 同事的帮助, 协力解决了黑屏问题
网上各种搜集关键字: GL_INVALID_OPERATION, OpenGL error 0x0502, 以及 cocos2dx 错误
解决方案1: 游戏源码
c++代码问题, 从c++端代码处修复
下列代码的使用与否,反复测试和黑屏无关, 从c++端代码入手失败
void AppDelegate::applicationDidEnterBackground(){ CCDirector::sharedDirector()->stopAnimation(); SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); SimpleAudioEngine::sharedEngine()->pauseAllEffects(); }
void AppDelegate::applicationWillEnterForeground(){ CCDirector::sharedDirector()->startAnimation(); SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); SimpleAudioEngine::sharedEngine()->resumeAllEffects(); }
解决方案2:引擎源码
同样为c++方案解决方式,通过修改cocos2dx引擎来解决问题, 来自 zu12jing 的解决方案,结果同样无法解决问题
1.cocos2dx/platform/CCPlatformMacros.h
将#define CC_ENABLE_CACHE_TEXTURE_DATA 1 修改为0
2.cocos2dx/platform/android/java/src/org/cocos2dx/lib/Cocos2dxGLSurfaceView.java
注释掉super.onPause() //2.2.6已注释掉
3.android工程目录下jin/hellocpp/main.cpp
注释掉else后面的所有代码//2.2.6已注释掉
解决方案3:修改AndroidManifest.xml配置文件
修改android下的manifest配置文件, 来自 lcg_ryan 的解决方案, 在屏幕变化时会导致cocos2dx重绘,但本人的黑屏无法用此方案解决
给activity增加
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|navigation|screenLayout"
解决方案4:更改适配版本
修改android下的manifest配置文件,更改适配版本, 无效
从 14 改为 8
android:minSdkVersion="14"
解决方案5: 清理缓存
清空缓存,三清下面的目录,重新生成cocos2dx缓存还是不行
\proj.android\assets
\proj.android\libs
\proj.android\obj
解决方案6:更改另一些配置
更改manifest一些其他配置
1.删掉 (完全没有这个项目)
android:noHistory="true"
2.添加singleInstance属性 (无效)
android:launchMode="singleInstance"
解决方案7:修改安卓开发者配置
在 black screen when returning from background 这个帖子下找到了最后的老外回答
1. Go to ‘Settings’
2. Select ‘Developer Options’
3. Uncheck ‘Do not keep activities’
死马当活马医,试一试的态度我打开了开发者选项,拉到最底,发现“不保留活动”处于开启状态,关闭后游戏运行正常,调试正常
我想当初开启它是为了用的时候节能省电,不过从这个方面考虑,我并没有从根本上解决程序在此模式下完美运行的方式,所以,如果你解决了这个世纪难题,请在下方留言给出答复,谢谢各位朋友