cocos2d-x, UIKit, transparentiview
cocos2d-x使用一個專門的OpenGL View進行渲染, 它的渲染和UIKit是分開進行的, 所以咱們使用時通常是把cocos2d-x全屏顯示, 好比 Ray的這篇教程(http://www.raywenderlich.com/4817/how-to-integrate-cocos2d-and-uikit) (cocos2d-x和cocos2d在本篇文章中沒有本質區別)優化
若是咱們把cocos2d做爲一個子view插進來時, cocos2d的scene若是不加任何東西, 就會是黑色的一個矩形, 沒法作成透明效果. 即便把OpenGL View的background color 設成 clearColor 也沒用. cocos2d到底能不能變得透明?ui
經過bing艱難的找到這篇自問自答, http://stackoverflow.com/questions/12846744/cocos2d-opengl-es-becoming-transparent-over-uiview, 雖然只有一個贊, 但確實是網上惟一一個可以解決該問題的回答. 必須記錄下來以饗後人.spa
1. opengl view初始化時必定要選擇 kEAGLColorFormatRGBA8 像素模式, 這樣纔可以支持透明. orm
[CCEAGLView viewWithFrame: CGRectMake(0, 0, winHeight, winWidth) pixelFormat: kEAGLColorFormatRGBA8 depthFormat: GL_DEPTH24_STENCIL8_OES preserveBackbuffer: NO sharegroup: nil multiSampling: NO numberOfSamples: 0];
2. opengl view要啓用透明模式, 有一個 opaque 屬性, 默認爲YES, 表示會自動把覆蓋區域的內容遮擋住, 這是爲了優化渲染快速裁切, 咱們要把它設成 NO.blog
glClearColor(0, 0, 0, 0); _cocosView.backgroundColor = [UIColor clearColor]; _cocosView.opaque = NO;
3. cocos2d-x的clear color要設置爲(0, 0, 0, 0). 這個值是opengl在開始渲染每一幀時, 給每一個像素設置的默認值. 由於cocos2d-x和UIKit的渲染是在不一樣opengl管線裏實現的, 由於cocos2d-x會把UIKit渲染的內容替換到, 表現出來就是黑屏.教程
這個須要修改cocos2d-x的源代碼, 在 CCDirector.cpp 的 void Director::setGLDefaultValues() 中, 把clear color值改一下就能夠了.get
使用以上三步操做, 咱們就能夠如今透明的cocos2d-x界面, 遮罩在UIKit上方. it