cocos2d-x与UIKit混合编程实现半透明效果

时间:2023-01-29 20:15:55

关键词

cocos2d-x, UIKit, transparent

问题

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到底能不能变得透明?

通过bing艰难的找到这篇自问自答, http://*.com/questions/12846744/cocos2d-opengl-es-becoming-transparent-over-uiview, 虽然只有一个赞, 但确实是网上唯一一个能够解决该问题的回答. 必须记录下来以飨后人.

解决方案

1. opengl view初始化时一定要选择 kEAGLColorFormatRGBA8 像素模式, 这样才能够支持透明.

    [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.

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值改一下就可以了.

使用以上三步操作, 我们就可以现在透明的cocos2d-x界面, 遮罩在UIKit上方.

cocos2d-x与UIKit混合编程实现半透明效果的更多相关文章

  1. cocos2d 2.0和UIKit混合编程, Push CCDirector的时候出现黑屏的天坑

    症状 使用cocos2d 2.0和UIKit混合编程, 有一块用cocos2d编写的小程序, 将CCDirector push到一个UINavigationController里面. 虽然事先在后台初 ...

  2. Layered Windows窗口的半透明效果

    介绍: Layered Windows是windows窗口中的一类,提供类似半透明的效果(阿尔法混合).半透明效果是字面上有能看出来的,但实际上根据MSND,该类型的窗口还能更好的支持非矩形的窗口,使 ...

  3. 玩转cocos2d-x lua-binding, 实现c++与lua混合编程

    引言 城市精灵GO(http://csjl.teamtop3.com/)是一款基于cocos2d-x开发的LBS社交游戏, 通过真实地图的探索, 发现和抓捕隐匿于身边的野生精灵, 利用游戏中丰富的玩法 ...

  4. swift 与 OC 混合编程

    原文地址:http://www.cocoachina.com/swift/20150608/12025.html 一.解决问题 Swift项目需要使用封装好的Objective-c组件.第三方类库,苹 ...

  5. 如玫瑰一般的PHP与C#混合编程

    故事背景是这样的,有一套项目,服务器端是用C#写的,为了完成某种事情,它需要使用到一个组件,这个组件很小但很重要,很不巧的是,这个这个组件是用PHP语言写的,如果为了使用这个组件而专门搭建一个PHP的 ...

  6. C和C++混合编程中的extern "C" {}

    引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: 1 2 3 4 5 6 7 8 9 #ifdef __cplusplus extern "C" { #endif ...

  7. C# 托管和非托管混合编程

    在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难.   最直接的实现托管与非托管编程的方法就是 ...

  8. [转载:]C#与Fortran混合编程之本地调用Fortran动态链接库

    前言 C#发展到现在,已是一门相当完善的语言,他基于C语言风格,演化于C++.并依靠强大的.NET底层框架.C#可以用来快速构建桌面及Web应用.然而在我们的实际工作中,尽管C#已经非常完善,但还是不 ...

  9. C#Matlab混合编程类 初始化问题解决方法

    ************** 异常文本 ************** System.TypeInitializationException: “myPlus.matClass”的类型初始值设定项引发异 ...

随机推荐

  1. Jquery动态进行图片缩略

    //页面加载完执行resizeImage()函数 $(document).ready(resizeImage()); function resizeImage(){ $(".pic a im ...

  2. oracle修改闪回日志的位置

    改变闪回日志位置的步骤: A.Change the value of the DB_RECOVERY_FILE_DEST initialization parameter to a new value ...

  3. [Boost基础]并发编程——asio网络库——异步socket处理

    异步服务器端 #include <conio.h> #include <iostream> using namespace std; #include <boost/as ...

  4. C&num;多线程解决界面卡死问题

    C#多线程解决界面卡死问题的完美解决方案 文章下最方有源码下载 问题描述:当我们的界面需要在程序运行中不断更新数据时, 当一个textbox的数据需要变化时, 对于这个问题可以先参考下我的另外一个文章 ...

  5. 系统自动生成ID&lpar;比UUID&period;radom&lpar;&rpar;&period;tostring&lpar;&rpar;要好看&rpar;

    public class test1 { public static void main(String[] args) { char[] para = {'A','B','C','D','E','F' ...

  6. android EventBus详解(二)

    上一节讲了EventBus的使用方法和实现的原理,下面说一下EventBus的Poster只对粘滞事件和invokeSubscriber()方法是怎么发送的. Subscribe流程 我们继续来看Ev ...

  7. oracle 创建表空间TABLESPACE

    题外话: 在oracle中,我们的数据库用户都有一个默认表空间归属,当在该用户下创建表或其他对象时默认会将其归属在默认表空间: 不排除后期修改了用户默认表空间的情况存在,此后新加入的对象默认会放置在新 ...

  8. Python:SQLMap源码精读—基于错误的盲注(error-based blind)

    目标网址 http://127.0.0.1/shentou/sqli-labs-master/Less-5/?id=1 Payload的生成 <test> <title>MyS ...

  9. ProxySQL&plus;MGR实现读写分离和主节点故障无感知切换 - 完整操作记录

    前面的文章介绍了ProxySQL用法,这里说下ProxySQL中间件针对Mysql组复制模式实现读写分离以及主节点故障时能够自动切换到新的主节点,而应用对此过程无感知的功能.Mysql组复制(MGR) ...

  10. POJ 2230 Watchcow&lpar;有向图欧拉回路&rpar;

    Bessie's been appointed the new watch-cow for the farm. Every night, it's her job to walk across the ...