ClippingNode实现新手引导高亮裁切

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); 运行效果如图:

  • 资源图片

http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/ClippingNode/zh.md

http://www.2cto.com/kf/201207/144656.html

战争迷雾效果:

http://bbs.9ria.com/thread-157487-1-1.html

http://www.benmutou.com/archives/455

时间: 2024-07-28 22:13:06

ClippingNode实现新手引导高亮裁切的相关文章

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

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

quick-x 新手引导

大部分游戏都有新手引导,而新手引导很多表现都是 其他地方压黑,新手引导的按钮等高亮可点.针对这种情况,用ClippingNode写了一个简单方便的遮罩层. 1 --[[ 2 touchRect: 3 1. CCRect 高亮区域 4 2. { 5 imagePath 高亮图片路径 6 imagePos 高亮精灵位置 7 scale, rotation 可选 8 } 9 canTouch: 高亮区域是否可点击 10 callback: 点击遮罩后的回调(比如点击后进行下一个引导) 11 ]] 12

如何简单的实现新手引导之UGUI篇

一个完整的游戏项目肯定是要做新手引导的,而引导做的好坏可能会影响玩家的留存.那么怎么简单的实现个简有效的引导呢!先不说废话,先看看效果,这是一个基于UGUI做的一个简单的引导! 怎么样,看着是那么回事吧?看起来确实有点丑,如果给按钮边缘加上缩放或者流光特效,那么逼格瞬间就上去了,可惜,没找到资源.最重要的是实现起来灰常简单,就一个函数搞定. 1,如何实现引导: 1,首先创建一个Mask遮罩,保证任意地方接受不到点击,适当的调整下Alpha. 2,将要点击的按钮高亮,保证引导按钮可以响应到点击事件

Unity3D新手引导开发手记

最近开始接手新手引导的开发,记录下这块相关的心得 首先客户端是Unity,在接手前,前面的同学已经初步完成了新手引导框架的搭建,这套框架比较简单,有优点也有缺点,稍后一一点评 我们的新手引导是由一个个强引导组成的,每个强引导都有一系列的步骤,这套框架实现的功能就是: 1.组织一个强引导(任务)所需的步骤,并可以一步一步前进 2.实现蒙版,遮罩以及高亮引导区 第一个功能比较简单,首先需要有一个新手引导管理器来管理每一个步骤,然后启动第一个步骤,只需要在每一次点击的事件处理中,通知新手引导管理器,结

NGUI 新手引导

现在我们的游戏已到了开发后期,这个时候需要做新手引导这一块(恶心的新手引导,真想说游戏行业究竟哪个2B最先想出来要引导的???代码搞的到处都是,改了一次又改!) 吐槽过后进入正题:主要还是UI相关的操作,3D场景操作引导的东西比较少.这一块我们使用的是unilua来做这件事,因为我们还没考虑用完善的热更新方案(比如ulua)来做新手引导,所以使用unilua也能暂时满足需求. 具体的做法是:新手引导这一块属于一个单独的界面,其中的Panel层次是比较高的(高于被引导的所有其他界面),其中主要的包

最最轻量级的新手引导库

项目介绍: 最最轻量级的新手引导库,能够快速为任何一个View创建一个遮罩层,支持单个页面,多个引导提示,支持为高亮区域设置不同的图形,支持引导动画,方便扩展,良好支持fragment 本系统能够快速的为一个Activity里的任何一个View控件创建一个遮罩式的导航页. 工作原理 首先它需要一个目标View或者它的id,我们通过findViewById来得到这个View,计算它在屏幕上的区域targetRect,通过这个区域,开始绘制一个覆盖整个Activity的遮罩,可以定义遮罩的颜色和透明

cocos3——8.实现新手引导

1.使用ClippingNode裁剪范围 编写裁剪接口: function createClipNode(node, stencil, inverted) { var clip_node = new cc.ClippingNode(); // 设置模板节点(就是要裁剪的区域) clip_node.stencil = stencil; // 添加要被裁剪掉的节点(显示的内容) clip_node.addChild(node); if (inverted != undefined) { // 设置反

使用cocos2d-js制作游戏新手引导(二)

本文上接前我一篇博文<使用cocos2d-js制作游戏新手引导(一)> 一.定位器的实现 定位器的目的是实现对场景树中的节点精确定位,获取对象实例,从而获取节点在界面中的位置.矩形大小等信息. 定位器:在cocos2d(js)游戏引擎中用于精确描述场景树中的某一节点的字符串,其实现方式借鉴了css(层叠样式表)选择器设计思路,以下我们将实现一个简单的从定位器字符串解析到节点定位的整个过程. 1.定位符规则 在cocos2d中可以通过节点名字.节点tag值来表示一个节点,在js中还可以使用对象的

ClippingNode做游戏的新手指导

auto stencil=Sprite::create("arrow.png"); stencil->setPosition(btn_right->getPosition()); btn_right = Button::create("arrow.png"); 游戏开发中,很多游戏都会出现新手指导,让玩家熟悉游戏的操作流程. 那做为苦逼的我们,如何实现新手指导?(虽然很苦逼,有时却很快乐-) (1)背景置灰.图标高亮 (2)屏蔽其他图标的点击事件 1.