加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-js 3.0 颜色变换(调整sprite/图片的色调)

发布时间:2020-12-14 19:54:14 所属栏目:百科 来源:网络整理
导读:Flash在滤镜方面做得比较成熟,starling也有很多现成的办法。 但Cocos2D这里就显得比较单薄,百度/谷歌很少相关资料。 后续如果有时间,再慢慢整理各种滤镜效果。 这里先介绍一下颜色变换的功能,这个是cocos2d内置的,用起来比较方便,只需要知道具体做了什

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

但Cocos2D这里就显得比较单薄,百度/谷歌很少相关资料。
后续如果有时间,再慢慢整理各种滤镜效果。
这里先介绍一下颜色变换的功能,这个是cocos2d内置的,用起来比较方便,只需要知道具体做了什么即可。
例如要把一个按钮变暗,也许一般做法是换一个图片,但其实也可以直接修改颜色值。
有三个方法可以做到:
            this.color = cc.color(150,150,150);

            this.setColor(cc.color(150,150))

            var action = cc.tintTo(1,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._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,就等于把每个通道颜色都减淡,最终变暗。
kenkofox@qq.com https://github.com/kenkozheng

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读