位置: 编程技术 - 正文

cocos2d-x初探学习笔记(30)2.1新特性之CCClippingNode(cocos2dx官方教程)

编辑:rootadmin

推荐整理分享cocos2d-x初探学习笔记(30)2.1新特性之CCClippingNode(cocos2dx官方教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2d教程,cocos2dx视频教程,cocos 2d x,cocos2dx4.0教程,cocos2dx4.0教程,cocos2dx官方教程,cocos2dx官方教程,cocos2dx4.0入门,内容如对您有帮助,希望把文章链接给更多的朋友!

从本篇起介绍一些cocos2d-x的新功能,包括CocosBuilder动画等功能,还包括从2.1版本添加的一些新特性,本篇文章就介绍一下2.1中我非常喜欢的一个新特性--可以根据一个模板切割图片的节点--CCClippingNode。这个类提供了一种不规则切割图片的方式,在这种方式以前,我们可以使用纹理类自带的setTextureRect函数来切割矩形区域,这种方式就像是J2me的setClip方法一样整块的切割图片,比如我们要实现一个血条的时候,就可以使用这种方式进行切割,切掉我们不想显示的部分,而新特性中提供的CCClippingNode最大的不同之处就是裁减将不仅仅局限于矩形,可以根据任何形状进行裁减,而你要做的只是给一个“裁减模板”,这就好比是我们用剪刀剪形状,需要一个模具类的东西,然后我们拿着模具和要被裁减的纸顺着模具的边缘用剪刀剪就可以剪出一个模具的样子一样,首先来看这个类的常用函数(需要说明的是,这里介绍的函数只是这个类独有的,这个类继承自CCNode节点类,因此节点类有的函数也就不做介绍了):

getStencil:返回一个节点对象,这个对象就是之前提到的“裁减模板”。

setStencil:设置“裁减模板”。

getAlphaThreshold::这种裁减是可以改变裁减的透明度的,修改这个透明度就是通过设置这个阈值。

setAlphaThreshold:获得这个透明度阈值。

isInverted:之前说过的剪刀剪形状的例子,剪完形状以后,是显示被剪掉的部分,还是显示剩余的部分呢,默认isInverted值是false,是显示被剪掉的部分,设置为true则是显示剩余的部分。这个函数获得这个值。

setInverted:设置isInverted值。

使用这个效果,一般的过程是这样的:

//创建“裁减模板”

CCNode*stencil = this->stencil();

stencil->setTag( kTagStencilNode);

stencil->setPosition( ccp(,) );

//创建裁减节点类

CCClippingNode*clipper = this->clipper();

clipper->setTag( kTagClipperNode);

clipper->setAnchorPoint(ccp(0.5,0.5));

clipper->setPosition( ccp(s.width / 2 -, s.height/ 2 - ) );

//为设置裁减节点类设置“裁减模板”

clipper->setStencil(stencil);

this->addChild(clipper);

//设置裁减节点类所放的内容

CCNode*content = this->content();

content->setPosition( ccp(,) );

clipper->addChild(content);

通过这个新特性可以实现出很多有意思的效果,首先来学习一下cocos2D-x中的testApp的使用实例首先是一个类似ScrollView的滚动效果,在这之前,介绍cocos2D-x的另一个新特性—CCDrawNode,这个类不是一个新的功能,而是对原来功能的封装,在这之前,如果我们需要绘制矩形,圆形,点等形状,需要重新写一个类继承自节点或布景层,然后重写draw函数,现在使用CCDrawNode,可以直接使用这个类来绘制相应图形,相关函数如下所示:

drawDot:绘制点,参数给出坐标位置。

drawSegment:绘制片断,给出起始点,结束点,半径等参数。

drawPolygon:绘制矩形,可以分别给出填充颜色和边框颜色,还可以设置边框宽度。

实现类似ScrollView的滚动效果的代码如下:

//创建裁减节点类

CCClippingNode *clipper= CCClippingNode::create();

clipper->setTag( kTagClipperNode);

clipper->setContentSize( CCSizeMake(, ) );

clipper->setAnchorPoint( ccp(0.5, 0.5) );

clipper->setPosition( ccp(this->getContentSize().width / 2, this->getContentSize().height/ 2) );

clipper->runAction(CCRepeatForever::create(CCRotateBy::create(1, )));

this->addChild(clipper);

//创建“裁减模板”

CCDrawNode*stencil = CCDrawNode::create();

CCPointrectangle[4];

rectangle[0]= ccp(0, 0);

rectangle[1]= ccp(clipper->getContentSize().width,0);

rectangle[2]= ccp(clipper->getContentSize().width,clipper->getContentSize().height);

rectangle[3]= ccp(0, clipper->getContentSize().height);

//绘制一个矩形

ccColor4Fwhite = {1, 1, 1, 1};

stencil->drawPolygon(rectangle,4, white, 1, white);

//为设置裁减节点类设置“裁减模板”

clipper->setStencil(stencil);

//设置裁减节点类所放的内容

CCSprite*content = CCSprite::create(s_back2);

content->setTag( kTagContentNode);

content->setAnchorPoint( ccp(0.5, 0.5) );

content->setPosition( ccp(clipper->getContentSize().width / 2, clipper->getContentSize().height/ 2) );

clipper->addChild(content);

之后使用触摸控制的三个函数设置content的位置就可以了,效果如图所示:

如果说关于ScrollView是一个已经有解决方案的办法了,那么下面这个效果将更加体现这个新效果的作用,实现一个子弹打孔的效果:

void HoleDemo::setup()

{

//子弹击穿的图片,很多地方都用到的ABCD图

cocos2d-x初探学习笔记(30)2.1新特性之CCClippingNode(cocos2dx官方教程)

CCSprite*target = CCSprite::create(s_pPathBlock);

target->setAnchorPoint(CCPointZero);

target->setScale(3);

//创建CCClippingNode,这个CCClippingNode并不是负责切割弹孔的,负责切割出“ABCD图”的

m_pOuterClipper= CCClippingNode::create();

m_pOuterClipper->retain();

CCAffineTransformtranform = CCAffineTransformMakeIdentity();

tranform= CCAffineTransformScale(tranform, target->getScale(), target->getScale());

m_pOuterClipper->setContentSize( CCSizeApplyAffineTransform(target->getContentSize(),tranform));

m_pOuterClipper->setAnchorPoint( ccp(0.5,0.5) );

m_pOuterClipper->setPosition( ccpMult(ccpFromSize(this->getContentSize()), 0.5f) );

m_pOuterClipper->runAction(CCRepeatForever::create(CCRotateBy::create(1, )));

m_pOuterClipper->setStencil( target);

//负责弹孔切割的CCClippingNode

CCClippingNode *holesClipper= CCClippingNode::create();

//显示切割后剩余部分

holesClipper->setInverted(true);

//设置alpha阈值

holesClipper->setAlphaThreshold( 0.f );

holesClipper->addChild(target);

//弹孔层,所有弹孔都在这个节点中

m_pHoles= CCNode::create();

m_pHoles->retain();

holesClipper->addChild(m_pHoles);

//负责切割弹孔的“裁减模板”

m_pHolesStencil= CCNode::create();

m_pHolesStencil->retain();

holesClipper->setStencil( m_pHolesStencil);

m_pOuterClipper->addChild(holesClipper);

this->addChild(m_pOuterClipper);

this->setTouchEnabled(true);

}

点击某一点后,该点出现击穿效果:

//大小旋转随机

float scale= CCRANDOM_0_1() * 0.2 + 0.9;

floatrotation = CCRANDOM_0_1()* ;

//弹孔上的效果图片,只是作为装饰

CCSprite*hole = CCSprite::create("Images/hole_effect.png");

hole->setPosition( point);

hole->setRotation( rotation);

hole->setScale( scale);

m_pHoles->addChild(hole);

//真正的弹孔切割

CCSprite*holeStencil = CCSprite::create("Images/hole_stencil.png");

holeStencil->setPosition( point);

holeStencil->setRotation( rotation);

holeStencil->setScale( scale);

m_pHolesStencil->addChild(holeStencil);

//被“击打”的“abcd图”缩放一下,效果更真实

m_pOuterClipper->runAction(CCSequence::createWithTwoActions(CCScaleBy::create(0.f,0.f),CCScaleTo::create(0.f,1)));

效果如图所示:

我觉得这个功能很有意思,打算写个游戏实例,过一段时间会发在博客上。

如有错误,请多多指教,欢迎大牛拍砖

cocos2D-x初探学习笔记()2.1新特性CCPhysicsSprite 本篇文章继续介绍cocos2D-x2.1的新特性:CCPhysicsSprite和CCPhysicsDebugNode,从名称上就可以看出来这两个类是和物理引擎相关的类,和之前介绍的CCDrawNode一样

cocos2D-x初探学习笔记()-cocos2d-x & javascript跨平台初体验 近日,cocos2d家族开始了版本的联合发布,也就是说从cocos2d-x的2.1版本开始,终于可以实现广大开发者期盼已久的一套代码横跨ios,android和html5的梦想了

cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND 个人原创,欢迎转载,转载请注明原文地址

标签: cocos2dx官方教程

本文链接地址:https://www.jiuchutong.com/biancheng/369023.html 转载请保留说明!

上一篇:cocos2d-x初探学习笔记(29)-cocosBuilder(cocos2d-x教程)

下一篇:cocos2D-x初探学习笔记(31)2.1新特性CCPhysicsSprite(cocos2dx官方教程)

  • 个人退税需要多少天
  • 内部退养个人所得税政策
  • 融资租赁的两种模式
  • 应交税费和应交增值税
  • 公司购入小汽车是否可以抵扣
  • 小规模纳税人转让土地使用权
  • 电影院场地出租价格
  • 利息收入交税会计分录怎么做
  • 专票当月抵扣后当月作废会被发现吗
  • 对方公司不能开发票怎么办
  • 差额征税进项如何抵扣
  • 公司如何持续发展
  • 船票能开发票吗
  • 企业所得税如何计提会计分录
  • 不是办税员可以去税局办事吗
  • 装修增值税普通发票几个点
  • 固定资产可以一次性计入成本费用吗
  • 钢板租赁费用
  • 印花税记到哪个会计科目
  • 企业所得税期间费用明细表
  • 购销合同印花税税率
  • 企业停产没有收入,费用可以计入长期待摊费用吗
  • 日用品 食品
  • 关于暂时性差异的所得税会计处理,正确的是
  • 预付卡销售怎么做账
  • 主营业务收入多栏式怎么填
  • php获取访问者qq
  • php实现上传图片功能
  • 日记账登记错了怎么办
  • wlan和蜂窝版的区别
  • 我老公有外遇了,我很爱他,我该怎么办
  • 施工单位奖项名称大全
  • laravel 日志配置
  • 在草地上吃零食叫什么
  • 未担保余值是谁承担
  • 比斯蒂荒野上的“外星孵化场”,新墨西哥州 (© Ian Shive/Tandem Stills + Motion)
  • ajax向php传值
  • 空调采购及安装税率
  • google map
  • yolov5 output
  • 企业所得税资产总额根据什么填
  • 应交增值税的账务处理有哪两种
  • 商品出入库台账
  • 视同销售在纳税明细表中怎么填
  • 企业向个人提供分期的商业活动属于
  • 纳税人的交际应酬消费可以抵扣进项税额
  • 先弥补亏损还是先分配利润
  • 开发成本为什么放在存货里
  • 未计提完固定资产怎么办
  • 贴现法付息的实际利息
  • 筹资活动产生的现金流量净额减少说明什么
  • 出货后90天付款
  • 建筑行业现在还能斤不
  • 收到待报解预算收入是国家退的税吗
  • 设备安装成本怎么结转
  • 手撕发票是
  • 招待客户住宿属于什么费用
  • 现金日记账和银行日记账必须逐月结出余额
  • 小规模纳税人销售自己使用过固定资产
  • 固定资产清理后怎么做账
  • mysql如何优化sql查询
  • 数据库性能优化方法论和最佳实践
  • 一次性压缩洗脸巾
  • bios如何设置关机键开机
  • linux命令关机命令
  • mac系统教程
  • 在centos上安装pycharm
  • pap是什么文件
  • win8更新错误
  • linux安装jdk和tomcat
  • JavaScript Math.ceil() 函数使用介绍
  • python3 bytes类型
  • jqueryui easyui
  • win10安装python2.7
  • python遍历文件目录
  • 今天百度汉语
  • 宝鸡税务局长
  • 武汉税务代理大概多少钱
  • 个人取得抽奖,购车抵用,需要缴纳个人所得税吗
  • 我国税务师事务所有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设