IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> cocos2dx学习——裁剪节点(ClippingNode) -> 正文阅读

[游戏开发]cocos2dx学习——裁剪节点(ClippingNode)

一、参考文章

博客园文章参考文章链接:cnblogs.com/dudu580231/p/5711269.html

二、裁剪节点的原理

	裁剪节点在cocos2dx中是ClippingNode类类型的对象,它是Node的子类。裁剪节点主要是根据模板(Stencil)
来对底板(裁剪节点的孩子节点)进行切割,从而生成任何形状的节点,达到想要的现实效果。以下图为例来
讲解裁剪节点:

在这里插入图片描述

	此处以把裁剪节点直接放在Layer上为例,可以这样理解裁剪节点(ClippingNode)、底板(Child)、
模板(Stencil)之间的关系。模板可以是任意类型的节点,但是我们通常使用DrawNode类型的节点来作为
裁剪节点的模板。
	从组成上来说:“裁剪节点” = “底板” + “模板”。裁剪节点有两个重要的组成部分,裁剪的模板Stencil,
以及裁剪的对象,即模板(通常模板作为裁剪节点的孩子节点)。
	从作用效果上来说,“裁剪节点” = “底板” - “模板”。因为以模板来进行挖洞,模板剩余的部分即为裁剪
节点的显示效果部分。

1、常用接口说明

	首先,说一说裁剪节点的学习使用过程中的常用接口,不然再示例中展现出来的效果可能会使你一脸懵逼。
1ClippingNode::setInverted(bool inverted);
说明:该函数是设置底板的显示内容。通过模板对底板进行裁剪之后,到底是显示裁剪的部分还是显示裁剪
	  区域外的部分。默认参数为false,表示显示被裁剪节点裁剪到的区域;如果设为true,则显示底板中
	  未被裁剪的部分。

2ClippingNode::setAlphaThreshold(GLfloat alphaThreshold)
说明:该函数作用是设置透明度的阈值,主要是针对模板的裁剪范围。我们都知道图片是由不同的像素点组成,
	  当我们使用图片作为一个裁剪节点的模板时,可以通过该函数来设置模板的那些区域可以在地板上起到
	  裁剪的作用。
	  参数的取值范围是[0,1]之间。一般主要用于处理图片的透明度为0和非0的情况。
例如:setAlphaThreshold(0.5);则表示图片中像素值大于0的像素点会在地板上起到裁剪效果,而像素值
	  小于0的像素点不会在地板上起到裁剪效果。

3ClippingNode::setStencil(Node *stencil)
说明:设置裁剪节点的模板,当设定好了裁剪节点ClippingNode和裁剪节点的模板之后,可以通过该接口来设
	  置某个节点作为裁剪节点的模板。

三、举例说明

1、示例1

模板:以一个小球作为裁剪节点的模板

在这里插入图片描述

底板:以一张美女图片(.....口水,老婆?)作为裁剪节点的底板

在这里插入图片描述

由模板和底板组成一个裁剪节点,然后将裁剪节点放在一个空的Layer上面。

效果如下图所示:

在这里插入图片描述

上述效果源码如下:

在这里插入图片描述

(1)setInverted函数

	在上述代码的基础上,我们把setInverted函数的参数设置为false,来看看是什么效果。

在这里插入图片描述

分析:
	有上图两张图片的对比可见,可以深刻的理解函数setInverted,到底是设置底板的被裁剪的部分可见还是
未被裁剪的部分可见,则可清晰的进行设置。

上述效果源码如下:

在这里插入图片描述

(2)setAlphaThreshold函数

	从上述的两个效果图我们可以看出裁剪的是矩形内容。(啊啊啊,为什么会是矩形呢?你给出来的小球不是
圆形的吗?)废话,你见过圆形的图片吗,图片不都是矩形的吗,圆形的是因为他的周围像素点都是0,透明的,
你是看不见的,所以在效果上看起来才是圆形的。
	给你看看小球的真面目:

在这里插入图片描述

	如上图所示,图中的白色区域就是我们平时无法看见的,透明度为0的区域。对于一个图片作为裁剪节点来说,
默认设置的透明度是0,即图片中的任意一处都会在底板上进行裁剪出来。那下面我们就试试,是图片中的白色
区域不进行裁剪。

在这里插入图片描述

2、示例2

	给裁剪节点添加孩子节点,以此来完成不同的裁剪内容。在实际的项目开发过程中,我们可以通过使用一
裁剪节点,通过改变裁剪节点模板的形式,从而达到不同的裁剪效果。怎样改变裁剪节点的模板呢?我们可以
给裁剪节点添加不同的孩子节点,孩子节点不同,则裁剪节点不同,裁剪的效果自然也不一样。

效果如下:
(知道有些人觊觎我老婆已久,所以就打了个码,恳求大家放过,祝福我们把。)

在这里插入图片描述

源码如下:

在这里插入图片描述

四、裁剪节点实现文字滚动

	在此部分,我将以裁剪节点实现滚动文字为例,即已裁剪节点实现跑马灯效果。在游戏的制作过程中,我们可能
会在页面的最下方一跑马灯的效果来实现“未成年人...,防止沉迷,抵制盗版....”等一系列信息。
	该例中以一个Label作为底板,代表着文字信息,以此来对底板进行裁剪。底板内容为“I love China, I am a Chinese!”。

1、裁剪

	对文字信息的裁剪效果如下:

在这里插入图片描述

	由上图可以知道,文字信息“I love China, I am a Chinese!”文字信息并没有被全部显示出来,只是显示出了
被裁剪部分,那么接下来将通过定时器来使底板不断地进行移动,从而实现滚动效果。

在这里插入图片描述

2、滚动

(1)相关源码如下:
首先,在上述代码下加入这两句代码,以此来执行定时器函数:

在这里插入图片描述

	其次,定时器执行函数的相关代码如下:

在这里插入图片描述

(2)滚动效果如下:

视频效果

五、裁剪节点实现遮罩

// 裁剪节点实现自定义遮罩 

// 裁剪节点的模板 
auto cropNode = Node::create();
cropNode->setAnchorPoint(Vec2(0.5,0.5));
// 裁剪节点的底板 
auto backGround = LayerColor::create(Color4B::BLACK);
backGround->setDrawFullScene(true);
backGround->setBlendFunc(BlendFunc::ALPHA_PREMULTIPLIED);
// 裁剪节点 
auto clipNode = ClippingNode::create();
clipNode->setStencil(cropNode);		// 设置裁剪节点的模板 
clipNode->setInverted(true);		// 设置裁剪区域可见 
clipNode->setAlphaThreshold(0.5);	// 设置阈值  
clipNode->addChild(backGround);	// 设置裁剪节点的底板 
this->addChild(clipNode,10);
	当然也可以不用裁剪节点来实现遮罩,用下面的方式更加简单:
BlendFunc mask = { GL_ONE, GL_ONE_MINUS_SRC_ALPHA };
this->setBlendFunc(mask);
this->setOpacity(170);

六、裁剪节点实现新手引导

位置、大小的意义 

未完待续…

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:50:07  更:2021-10-11 17:52:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:35:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码