Cocos2d-x使用ClippingNode实现遮罩效果

2015年03月18日 11:16 0 点赞 0 评论 更新于 2025-11-21 17:37

一、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阈值等参数来达到不同的显示效果。

作者信息

feifeila

feifeila

共发布了 3994 篇文章