博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2d-js 3.0 颜色变换(调整sprite/图片的色调)
阅读量:5458 次
发布时间:2019-06-15

本文共 2085 字,大约阅读时间需要 6 分钟。

Flash在滤镜方面做得比较成熟,starling也有很多现成的办法。

但Cocos2D这里就显得比较单薄,百度/谷歌很少相关资料。
后续如果有时间,再慢慢整理各种滤镜效果。
 
 
这里先介绍一下颜色变换的功能,这个是cocos2d内置的,用起来比较方便,只需要知道具体做了什么即可。
 
例如要把一个按钮变暗,也许一般做法是换一个图片,但其实也可以直接修改颜色值。
 
有三个方法可以做到:
 
this.color = cc.color(150,150,150);            this.setColor(cc.color(150,150,150))            var action = cc.tintTo(1, 150,150,150);            this.runAction(action);
另外还有tintBy的action。
 
 
这里rgb设置之后,是什么意思呢?具体做了什么运算呢?
cocos2d最大的好处就是开源,那我们通过看html5版本的代码,就可以略知一二了。
 
setColor: function (color) {        var locDisplayedColor = this._displayedColor, locRealColor = this._realColor;        locDisplayedColor.r = locRealColor.r = color.r;        locDisplayedColor.g = locRealColor.g = color.g;        locDisplayedColor.b = locRealColor.b = color.b;        var parentColor, locParent = this._parent;        if (locParent && locParent.cascadeColor)            parentColor = locParent.getDisplayedColor();        else            parentColor = cc.color.WHITE;        this.updateDisplayedColor(parentColor);        /*if (color.a !== undefined && !color.a_undefined) {              //setColor doesn't support changing opacity, please use setOpacity            this.setOpacity(color.a);        }*/    },    /**     * Update the displayed color of Node     * @function     * @param {cc.Color} parentColor     */    updateDisplayedColor: function (parentColor) {        var locDispColor = this._displayedColor, locRealColor = this._realColor;        locDispColor.r = 0 | (locRealColor.r * parentColor.r / 255.0);        locDispColor.g = 0 | (locRealColor.g * parentColor.g / 255.0);        locDispColor.b = 0 | (locRealColor.b * parentColor.b / 255.0);        if (this._cascadeColorEnabled) {            var selChildren = this._children;            for (var i = 0; i < selChildren.length; i++) {                var item = selChildren[i];                if (item)                    item.updateDisplayedColor(locDispColor);            }        }    },

 

 
 
从源代码中抠出这样的一段,大概可以看出,新颜色值和原颜色做了一个multiply的操作,也就是乘法。具体multiply是什么,可以查查wikipedia。
 
那么rgb都设置150,就等于把每个通道颜色都减淡,最终变暗。
 

转载于:https://www.cnblogs.com/kenkofox/p/3988857.html

你可能感兴趣的文章
B.xml
查看>>
NOIP知识点汇总
查看>>
Ant Design 常用命令汇总
查看>>
Python3 学习第十三弹: 模块学习五之pickle与json
查看>>
GameFreamWork框架----事件系统的应用
查看>>
数组复制方法
查看>>
4.23
查看>>
滚动栏事件
查看>>
later(文件中有解(0229.rar))
查看>>
c#代码发送邮件,还可以实现群发
查看>>
USACO 4.2 Job Processing(贪心)
查看>>
yii1 安装(-)
查看>>
Nginx 虚拟主机示例
查看>>
snmp 简单的网络管理协议
查看>>
如何有效抓取SQL Server的BLOCKING信息
查看>>
导出特定内容成insert语句
查看>>
<base href="<%=basePath%>">的理解
查看>>
面向对象开发
查看>>
在Win7中将我的电脑快捷方式放入任务栏
查看>>
面向对象chapter3
查看>>