Cocos2d-x使用ClippingNode实现遮罩效果
一、ClippingNode简介
ClippingNode是Node的子类,它借助模板(stencil)来绘制裁剪后的内容(子节点)。这里的模板是另一个Node类型的节点,不过该模板节点本身不会被绘制。裁剪操作是通过模板的alpha部分(可由alphaThreshold调节)来完成的。
在使用ClippingNode之前,需要包含头文件:
#include <CCClippingNode.h>
类ClippingNode继承关系图
(此处原始内容未给出具体图,可后续补充相关图片说明)
二、模板与底板
最终的显示效果是在底板的对应位置裁剪出模板形状的部分并显示。例如,图中灰色部分即为显示效果。
若设置倒置效果,可使用如下代码:
clippingNode:setInverted(true)
当设置了倒置后,显示效果会有所不同(图中灰色部分为最终显示效果)。
三、示例代码
以下是实现遮罩效果的Lua主要代码:
-- 遮罩效果
-- 模板
local stencil = cc.Node:create()
local dogTmp = cc.Sprite:create("res/dog.png")
dogTmp:setPosition(cc.p(visibleSize.width/2, visibleSize.height/2))
stencil:addChild(dogTmp)
-- 初始化一个裁剪节点
local clippingNode = cc.ClippingNode:create(stencil)
-- 倒置(Inverted)
-- 如果设置为真(true),模板(stencil)会被反转,此时会绘制内容而不绘制模板(stencil)。 默认设置为假(false)
clippingNode:setInverted(true)
-- alpha阈值(threshold)
-- 只有模板(stencil)的alpha像素大于alpha阈值(alphaThreshold)时内容才会被绘制。
-- alpha阈值(threshold)范围应是0到1之间的浮点数。 alpha阈值(threshold)默认为1(alpha测试默认关闭)
clippingNode:setAlphaThreshold(0)
-- 底板
local floor = cc.LayerColor:create(cc.c4b(0, 0, 0, 150))
clippingNode:addChild(floor)
sceneGame:addChild(clippingNode)
运行效果
- 倒置情况:当设置
clippingNode:setInverted(true)时,会呈现出特定的倒置遮罩效果。 (此处原始内容未给出具体图,可后续补充倒置效果的图片说明) - 未倒置情况:若不设置倒置或者将其设置为
false,会呈现出正常的遮罩效果。 (此处原始内容未给出具体图,可后续补充未倒置效果的图片说明)
综上所述,通过上述代码和设置,我们可以在Cocos2d-x中使用ClippingNode实现遮罩效果,并且可以根据需求调整倒置和alpha阈值等参数来达到不同的显示效果。