cocos2d-x與UIKit混合編程實現半透明效果

關鍵詞

 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

相關文章
相關標籤/搜索