ClippingNode的使用

概述

ClippingNode(裁剪节点)可以用来对节点进行裁剪,可以根据一个模板切割图片的节点,生成任何形状的节点显示。

ClippingNode是Node的子类,可以像普通节点一样放入Layer,Scene,Node中。

  • ClippingNode 原理:

    ClippingNode是利用模板遮罩来完成对Node区域裁剪的技术。如何理解ClippingNode的遮罩?看下图的例子吧。

    所谓模板,就是一个形状,透过该形状可看到底板上的图层,如果底板上没有任何内容,则直接看到Layer上的内容,而底板上的东西又不会妨碍Layer上的东西,即模板在底板之外的空间对于Layer来说是透明的。

ClippingNode 常用方法

  1. create

    可以使用 static ClippingNode* create();方法创建一个ClippingNode对象。如下:

    auto clipper = ClippingNode::create();

    也可以使用 static ClippingNode* create(Node *stencil);方法创建;在创建的时候指定裁剪模板

    auto stencil = Sprite::create("CloseNormal.png");//模板节点
    clipper = ClippingNode::create(stencil);
  2. setStencil 可以使用void setStencil(Node *stencil);方法设置“裁剪模板”节点。 如下:
    clipper->setStencil(stencil);//设置裁剪模板
  3. setInverted

    可以使用void setInverted(bool inverted);方法,设置是显示被裁剪的部分,还是显示裁剪。true 显示剩余部分。false显示被剪掉部分。 如下:

    clipper->setInverted(true);//设置底板可见,显示剩余部分
  4. setAlphaThreshold

    可以使用void setAlphaThreshold(GLfloat alphaThreshold);,设置alpha阈值, 只有模板(stencil)的alpha像素大于alpha阈值(alphaThreshold)时内容才会被绘制。 alpha阈值(threshold)范围应是0到1之间的浮点数。
    alpha阈值(threshold)默认为1。 如下:

    clipper->setAlphaThreshold(0);//设置绘制底板的Alpha值为0

ClippingNode示例

    auto bg = LayerColor::create(Color4B(255, 255, 255,255));
    this->addChild(bg, -1);//1

    auto stencil = Sprite::create("CloseNormal.png");
    stencil->setScale(2);//2
    auto clipper = ClippingNode::create();
    clipper->setStencil(stencil);//设置裁剪模板 //3
    clipper->setInverted(true);//设置底板可见
    clipper->setAlphaThreshold(0);//设置绘制底板的Alpha值为0
    this->addChild(clipper);//4

    auto content = Sprite::create("HelloWorld.png");//被裁剪的内容
    clipper->addChild(content);//5

    clipper->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
  1. 添加了一个白色的LayerColor作为背景层。
  2. 创建一个精灵,作为裁剪模板,并放大2倍
  3. 创建ClippingNode节点,并设置裁剪模板
  4. 设置裁剪显示,Alpha阈值,并将裁剪节点加到层中
  5. 设置被裁剪的内容

运行效果如图:

将 clipper->setInverted(true); 改为 clipper->setInverted(false); 运行效果如图:

  • 资源图片

时间: 2024-08-26 04:40:21

ClippingNode的使用的相关文章

cocos2dx[3.2](19)——裁剪节点ClippingNode

[唠叨] 学习cocos2dx 3.2确实比较吃力,因为网上关于最新版的v3.2的资料十分稀少,或者是讲解的确实不是很详细.大部分人都是根据官方文档照样画瓢,而对于有些比较抽象的概念及函数都是照着官方文档来讲解的.这样的结果,导致有些东西令我确实非常费解. 没有办法,只好自己来总结cocos2dx3.2,然后将个人的学习感悟分享给大家. PS:当然有些大牛写的文章还是很不错的. 有时候我们需要显示一张图片的部分区域,比如文字遮罩.图片遮罩... 本节要讲的ClippingNode的功能效果大致就

节点裁剪 ClippingNode

有时候我们需要一张圆形的图片,可是美术提供的是一个矩形的资源图片,怎么办?让美术再做一张圆形的?即使这样能暂时解决问题,无疑增加了开销,何况有时候你可能需要显示一张图片里的不同部分,不可能每种情况都让美术都做一次修改吧,这时候 cocos2d-x 里提供的节点裁剪技术就派上用场了. 节点裁剪 原理 cocos2d-x 提供 CCClippingNode 类的可以用来对节点进行裁剪,可以根据一个模板切割节点图片,生成任何形状(取决于模板)的节点显示. CCClippingNode 是 CCNode

ClippingNode 实现类似子弹打穿纸片效果

 auto target = Sprite::create("Images/blocks.png"); target->setAnchorPoint(Vec2::ZERO); target->setScale(3); _outerClipper = ClippingNode::create(); _outerClipper->retain(); AffineTransform tranform = AffineTransform::IDENTITY; tranfo

cocos js 3.8.1 clippingNode 不能被 ccui.ScrollView 或者ccui.Layout裁剪的bug

clippingNode不能被ccui.ScrollView.ccui.ListView.ccui.Layout裁剪问题,只需要 设置scrollView ...的裁剪类型 scrollView.setClippingType(ccui.Layout.CLIPPING_SCISSOR); 注:这个方法是ccui.Layout的方法,对cc.ScrollView不起作用

Cocos2dx3.2 Crazy Tetris 绘制不规则方块 遮罩(ClippingNode的使用)

前面已经思考了可能遇到的消除和面积判定问题,那么接下来的问题就是如何显示这些由于消除可能引出的不规则图形. 在这里,我使用了ClippingNode(遮罩).关于ClippingNode网上的介绍都非常仔细,因此我在这里只是简单的说一下: 正如他的名字一样,他本身也是一个节点,因此可以参考我的最开始的一篇关于节点树的博文,使用他时,需要将其添加到另外一个节点中. 使用时需要注意的是要向其中添加模板(stencil)和底板.Stencil的意思就是类似模具一样的东西,可以想象,如果我们将模具的形状

cocos2dx 3.0 用ClippingNode做游戏的新手引导

转自:http://blog.csdn.net/star530/article/details/20851263 本篇介绍的是用ClippingNode 做游戏的新手引导,额,或者说是做新手引导的一种可尝试的方式.ClippingNode的解释,我盗用Jacky的话来说就是:CCClipingNode是一个可裁剪节点,简单理解: (1)首先它是一个节点,继承于CCNode,所以它可以像普通节点一样放入CCLayer,CCScene,CCNode中. (2)作为节点,它就可以用作容器,承载其他节点

Cocos2d-x3.1中ClippingNode的使用实例

1.ClippingNode说明 ClippingNode是利用模板遮罩来完成对Node区域裁剪的技术,如何理解ClippingNode的遮罩?看下图的例子吧. 所谓模板,就是一个形状,透过该形状可看到底板上的图层,如果底板上没有任何内容,则直接看到Layer上的内容,而底板上 的东西又不会妨碍Layer上的东西,即模板在底板之外的空间对于Layer来说是透明的.假如有个精灵在模板之外的底板上运动,我们 是看不到它的.除非它进入模板的区域,我们才能看到它. 2.ClippingNode源码 #i

Cocos2d-x3.1利用ClippingNode实现标题闪亮特效

1.掌握ClippingNode的原理与使用 2.创建Cocos工程 3.在HelloWorld.cpp代码中添加如下代码: auto clip = ClippingNode::create();//创建裁剪节点 auto gameTitle = Sprite::create("game_title.png"); clip->setStencil(gameTitle);//设置裁剪模板 clip->setAlphaThreshold(0);//设置透明度阈值 clip-&g

(17)ClippingNode的使用

概述 ClippingNode(裁剪节点)可以用来对节点进行裁剪,可以根据一个模板切割图片的节点,生成任何形状的节点显示. ClippingNode是Node的子类,可以像普通节点一样放入Layer,Scene,Node中. ClippingNode 原理: ClippingNode是利用模板遮罩来完成对Node区域裁剪的技术.如何理解ClippingNode的遮罩?看下图的例子吧. 所谓模板,就是一个形状,透过该形状可看到底板上的图层,如果底板上没有任何内容,则直接看到Layer上的内容,而底