关于cocos2d-js中使用 ClippingNode 以及 BlendFunc 来实现遮罩

关于ClippingNode 以及 BlendFunc 来实现遮罩

1. ClippingNode实现遮罩

首先要准备

一张png有透明度的图片

一张想要被遮住的图片

cliper : function(frameName){

//创建一个遮罩的模板

var sten = new cc.Sprite(frameName);

//创建一个ClippingNode 并设置一些基础属性 容器宽高与模板有关

var clipnode = new cc.ClippingNode();

clipnode.attr({

stencil:sten,

anchorX:0.5,

anchorY:0.5,

alphaThreshold:0.8,//设置裁剪透明值阀值 默认值为1 等于1時 alpha = 0的部分也被裁剪 

});

return clipnode;

},

var clipnode = this.cliper("res/ui_cw_xizhizi_zhezhaodi.png”);

  clipnode.attr({

        x:size.width / 4,

        y:size.height / 2,

        //inverted:true,

        });

        this.addChild(clipnode);

        var bo2 = new cc.Sprite("#ui_pet_aptitude_1_1.png");

        bo2.attr({

        x:clipnode.width / 2,

        y:clipnode.height / 2 - 20,

        });

        bo2.runAction(cc.animate(animation).repeatForever());

        clipnode.addChild(bo2);

2. BlendFunc实现遮罩

首先要准备

一张png有透明度的图片(如果要中间显示 其他区域裁减掉 需要一张中间黑色不透明 然后周围全透明的png

一张想要被遮住的图片

两张图片需要宽高一样

testBlendFunc : function(){

    //创建底下的那个图片精灵

    var sp =  new cc.Sprite("#ui_pet_aptitude_1_1.png")

    sp.attr({

    anchorX:0,

    anchorY:0,

    });

    //创建遮罩精灵

    var mask = new cc.Sprite("res/ui_cw_xizhizi_zhezhaodi.png");

    mask.attr({

    anchorX:0,

    anchorY:0,

    });

    mask.setBlendFunc(cc.ONE_MINUS_SRC_ALPHA,cc.SRC_ALPHA)

    //创建一个可渲染纹理

    var rt = cc.RenderTexture(sp.width,sp.height);

    rt.attr({

    anchorX:0,

    anchorY:0,

    x:500,

    y:300,

    });

    this.addChild(rt);    

    rt.begin();

    sp.visit();

    mask.visit();

    rt.end();

},

源(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

这里使用mask.setBlendFunc(cc.ONE_MINUS_SRC_ALPHA,cc.SRC_ALPHA)

在中间黑色区域 cc.SRC_ALPHA = 1  cc.ONE_MINUS_SRC_ALPHA = 1 - 1 = 0

Rs * 0  +  Rd * 1,  Gs * 0  +  Gd * 1,  Bs * 0  +  Bd *1,  As * 0  +  Ad * 1

等于目的原来的颜色(Rd,Gd,Bd,Ad)

在外面透明区域  cc.SRC_ALPHA = 0  cc.ONE_MINUS_SRC_ALPHA = 1 - 0 = 1

Rs * 1  +  Rd * 0,  Gs * 1  +  Gd * 0,  Bs * 1  +  Bd *0,  As * 1  +  Ad * 0

等于源原来的颜色(Rs,Gs,Bs,As)即(0,0,0,0)

时间: 2024-12-25 06:48:57

关于cocos2d-js中使用 ClippingNode 以及 BlendFunc 来实现遮罩的相关文章

cocos2d JS 中的数组拼接与排序

1 var arrA = [];//创建三个局部变量的新数组 2 var arrB = []; 3 var arrC = []; 4 var newCards = this.MyMahjong;//创建一个新的局部变量等于一个全局变量的数组:并把里面的内容依次拆开再全部拼接 5 for(var t=0;t<newCards.length;t++){ 6 var char = newCards[t].charAt(0); 7 if(char == "a"){ 8 arrA.push

cocos2d js ClippingNode 制作标题闪亮特效

1.效果图: 之前在<Android 高仿 IOS7 IPhone 解锁 Slide To Unlock>中制作了文字上闪亮移动的效果,这次我们来看下怎样在cocos2d js 中做出类似的效果. 顺便给我公司的游戏打下广告.https://itunes.apple.com/cn/app/kuang-zhan-san-guo/id691116157? mt=8 2.效果原理 很easy.就是一张白色两边羽化的图片在标题上从左往右移动.可是普通的移动会穿帮.我们须要以标题作为模板来截取白色的图片

cocos2d JS 本地缓存存储登陆记住账号密码-&gt;相当于C++中的UserDefault

在cocos-js 3.0以上的版本中,当我们用到本地存储的时候,发现以前用到的UserDefault在JS中并没有导出,而是换成了LocalStorage. 在LocalStorage.h文件中我们查看了一下源码,使用方法就是设置Key-Value的方式 存储数据:cc.sys.localStorage.setItem("key","value") 获取数据:cc.sys.localStorage.getItem("key") 移除数据:cc.

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

JS中的运算符&amp;JS中的分支结构

一.JS中的运算符 1.算术运算(单目运算符) + 加.- 减.* 乘./ 除.% 取余.++ 自增.-- 自减 >>> +:有两种作用,连接字符串/加法运算.当+两边全为数字时,进行加法运算: 当+两边有任意一边为字符串时,起连接字符串的作用,连接之后的结果为字符串 除+外,其余符号运算时,会先尝试将左右变量用Number函数转为数字 >>> /: 结果会保留小数点 >>> ++: 自增运算符,将变量在原有基础上+1: --: 自减运算符,将变量在原

Js中的数据属性和访问器属性

Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性包含四个特性,分别是: configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为true enumerable:表示能否通过for-in循环返回属性 writable:表示能否修改属性的值 value:包含该属性的数据值.默

在Node.js中使用RabbitMQ系列二 任务队列

在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心解决的问题是避免立即处理那些耗时的任务,也就是避免请求-响应的这种同步模式.取而代之的是我们通过调度算法,让这些耗时的任务之后再执行,也就是采用异步的模式.我们需要将一条消息封装成一个任务,并且将它添加到任务队列里面.后台会运行多个工作进程(worker process),通过调度算法,将队列里的任

js 中arguments的应用

在js中每个函数类都有一个Arguments对象实例arguments,.首先他不是一个数组,可以说算一个伪数组,但是用数组的索引形式也能获取到他的值,如 let len = arguments.length;表示函数参数的个数 arguments[0]表示第一个参数 在函数中使用它的好处就是这个函数在多处调用且参数有不是必须传递的,这样可以利用arguments来处理,解决了不需要的参数也要传递的问题 在实际应用中分装的函数中使用了一下,有不对的和需要改进的地方,还请大家多多指教,一起学习 e

js中,实现css格式的改变

js中,实现属性值的改变 (1)prop属性实现,html中标签的class属性值发生改变: 语法:$(元素标识).prop("class",类属性值); 例子:$("#num_"+currentId).prop("class","no-selected"); 类似的改变class属性: $("#index_" + index).removeClass("current"); $(&qu