在游戏开发中,如果我们需要实现闪光的灯,照明弹效果等等,我么你可以采用混合模式来实现。

如果学习过OpenGL(ES),就知道里面使用glBlendFunc函数实现的。在cocos2d-x里肯定也有,对于精灵,可以使用mySprite->setBlendFunc()来现。

什么是颜色混合?

简单来说就是将RGBA中的A,经行操作处理。具体一点,就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。

OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜 色。(也可以不是相加,新版本的OpenGL可以设置运算方式,包括加、减、取两者中较大的、取两者中较小的、逻辑运算等,但我们这里为了简单起见,不讨 论这个了)
假设源颜色的四个分量(指红色,绿色,蓝色,alpha值)是(Rs, Gs, Bs,  As),目标颜色的四个分量是(Rd, Gd, Bd, Ad),又设源因子为(Sr, Sg, Sb, Sa),目标因子为(Dr, Dg, Db,  Da)。则混合产生的新颜色可以表示为:

(Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg, Bs*Sb+Bd*Db, As*Sa+Ad*Da)

glBlendFunc有两个参数,前者表示源因子,后者表示目标因子。这两个参数可以是多种值,下面介绍比较常用的几种。
GL_ZERO:     表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算。
GL_ONE:      表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算。
GL_SRC_ALPHA:表示使用源颜色的alpha值来作为因子。
GL_DST_ALPHA:表示使用目标颜色的alpha值来作为因子。
GL_ONE_MINUS_SRC_ALPHA:表示用1.0减去源颜色的alpha值来作为因子。
GL_ONE_MINUS_DST_ALPHA:表示用1.0减去目标颜色的alpha值来作为因子。

下面举一个例子:

     // backgroundCCSprite *helloSprite = CCSprite::create("man.png");helloSprite->setPosition(ccp(winSize.width/2, winSize.height/2));this->addChild(helloSprite);// add your spriteCCSprite *lightSprite = CCSprite::create("light.png");lightSprite->setColor(ccWHITE);lightSprite->setScale(4.0f);lightSprite->setPosition(ccp(winSize.width/2, winSize.height/2+40));ccBlendFunc cbl = {GL_DST_COLOR, GL_ONE};lightSprite->setBlendFunc(cbl);this->addChild(lightSprite, 2);

用到的light.png:-> <-(透明的)

看到,这个小人的光秃秃的头有种被照亮的感觉

使用颜色混合,加上动画,可以实现一些很酷的效果。

cocos2d-x 颜色混合相关推荐

  1. Cocos2d中使用颜色混合:加算,减算

    Cocos2d中使用颜色混合:加算,减算 转自http://blog.sina.com.cn/s/blog_7a2ffd5c0100xtid.html CCSprite有一个ccBlendFunc类型 ...

  2. 刨根问底---cocos2d源码的理解与分析

    主要看的是cocos2d的2D部分C++源码(不包含3D的或者是creator相关的),某些比较特殊的方法和变量会比较详细的展开分析讨论. cocos2dx_3.1.7版本 CCRef:[已看完] c ...

  3. Improve Performance and Reduce Memory with PVRTC Textures and Cocos2d

    转载自:http://www.uchidacoonga.com/2011/07/pvrtc-textures-and-cocos2d/ Hello everyone! A few months hav ...

  4. 【Cocos2d开发】Cocos2d下安卓环境的搭建

    在进行Cocos2d游戏开发前 我们先来配置一下环境,我们先来准备一下工具,我们所需要的工具分别为: 1.Cocos2d引擎 2.JDK 3.SDK 4.NDK 5.ANT 6.ADT 1.下载Coc ...

  5. cocos2d 从v1.x升级到v2.x需要注意的几个地方

    首先v1.x一些CCNode定位函数实现的有问题,导致返回的CCPoint的x坐标不正确(超出320后无变化),怀疑是其对屏幕旋转判断的不正确;而且这种现象在iOS 7.1之前的模拟器中运行都正常,在 ...

  6. cocos2d游戏jsc文件格式解密,SpideMonkey大冒险

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍cocos2d游戏中常用的jsc格式文件的解密." 01 - 在破解游戏应用中,经常会碰到后缀为jsc的文件,这是基于coco ...

  7. 如何优化cocos2d程序的内存使用和程序大小:第一部分

    译者: 在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区 ...

  8. Cocos2d入门--3--向量的应用

    小球向一个方向持续运动的Demo HelloWorldScene.h ...... //设置一个protected的属性 protected:cocos2d::Vec2 _vec; ...... He ...

  9. Cocos2d之Action类详解

    一.声明 文章中使用到的cocos2d的源代码的版本是cocos2d-x-3.3rc0. 二.主要内容 [Action类简介] 在cocos2d中,Action类是所有动作的基类.Action类继承了 ...

  10. [cocos2d-x]cocos2d和cocos2d-x的一些通用性

    不得不说要说总结,因为Cocos2d-X的代码和Cocos2d-iphone两个引擎除了语言不同外(Cocos2d-X使用C++,Cocos2d-iphone使用Object-C)可以说没有其他差异. ...

最新文章

  1. 50年前,Hello World发明者第一次提交的Go代码长这样……
  2. cpp 条件判断 大于等于_第31p,if条件语句,请满足我的要求
  3. linux 常用命令集
  4. C++ STL 基本使用Win32 版
  5. P2085 最小函数值 堆
  6. memcpy和strcpy函数
  7. python不等于缺陷
  8. 后台弹出界面权限 绕过_教您如何发微信「朋友圈」,设置访问权限
  9. w10系统asp服务器搭建,win10系统搭建asp环境的操作方法
  10. 如何准备国家公务员考试
  11. 微云Android2.2apk,微云安卓版V6.2.10
  12. CSDN日报20170317——《转行穷三年?未必!》
  13. 乾颐堂安德华为数通HCNA真题解析版(第2部分)
  14. 一款很好用的画图软件
  15. 【论文阅读】RAPTOR: Robust and Perception-Aware Trajectory Replanning for Quadrotor Fast Flight
  16. web漏洞-xss漏洞
  17. 解决Mygui不支持中文路径
  18. Serial Presence Detect (SPD) Table
  19. 【2020校招总结】接受社会的毒打,收获腾讯天美、字节跳动、网易互娱、华为等offer(开发岗)
  20. java毕业设计成品源码网站ssm水果商城系统电商购物项目

热门文章

  1. java遍历map前n项_Java遍历Map的几种方式
  2. Paragon Camptune X for Mac(Mac磁盘分区工具)
  3. 微型计算机期末考试题库,微机原理-期末考试题库及答案(含3套试卷)
  4. python学习(4)zip函数
  5. Python基础之三元表达式
  6. 接触角测量的常用测量法
  7. 逆向分析ObRegisterCallbacks学习回调结构
  8. LeetCode: 868. Transpose Matrix
  9. 【GFFrameWork】管理器和框架启动
  10. GUI(用户图形界面)