news 2026/7/16 9:57:39

【2014-01-26】cocos2dx学习笔记:CCClippingNode

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【2014-01-26】cocos2dx学习笔记:CCClippingNode

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2014-01-26| 标题:cocos2dx学习笔记:CCClippingNode分类:编程 / C && C++ / cocos2dx |标签:cocos2dx·CCClippingNode


cocos2dx学习笔记:CCClippingNode

    • CCClippingNode 使用注意事项
    • CCClippingNode 例子
    • CCClippingNode源码分析
      • CCClippingNode中的Stencil节点的位置

以下内容转自【 http://blog.sina.com.cn/s/blog_59b4c31c0101iom0.html 】

CCClippingNode 使用注意事项

最近使用了cocos2d-x 的CCClippingNode,在VC下编译可以出现效果,但是在IOS上毫无效果,发现网上也有人提出这个问题,先把方法记下来。

原帖地址:http://cocos2d-x.org/boards/6/topics/20141?r=20567#message-20567

for
iOS:

in AppController replace the gl-view creation with:

EAGLView*__glView=[EAGLView viewWithFrame:pixelFormat:kEAGLColorFormatRGBA8 depthFormat:GL_DEPTH24_STENCIL8_OES preserveBackbuffer:NO sharegroup:nil multiSampling:NO numberOfSamples:0];

for
Android:

in
game activity:

publicCocos2dxGLSurfaceViewonCreateView(){Cocos2dxGLSurfaceViewglSurfaceView=newCocos2dxGLSurfaceView(this);glSurfaceView.setEGLConfigChooser(5,6,5,0,16,8);returnglSurfaceView;}

CCClippingNode 例子

首先是两张图片:

background.png:来自cocos2dx的例子资源

smallcircle.png:

可以看到,smallcircle.png中间是透明****的,最外侧是透明的,整个png是个正方形

代码1:

CCSprite*bg=CCSprite::create("background.png");CCSprite*stencilA=CCSprite::create("smallcircle.png");CCClippingNode*clipA=CCClippingNode::create();clipA->setStencil(stencilA);clipA->addChild(bg);clipA->setAnchorPoint(ccp(0,0));clipA->setPosition(ccp(300,300));this->addChild(clipA);

效果图:

加了透明度阈值判断的代码2:

CCSprite*bg=CCSprite::create("background.png");CCSprite*stencilA=CCSprite::create("smallcircle.png");CCClippingNode*clipA=CCClippingNode::create();clipA->setStencil(stencilA);clipA->addChild(bg);clipA->setAlphaThreshold(GLfloat(0.5f));clipA->setAnchorPoint(ccp(0,0));clipA->setPosition(ccp(300,300));this->addChild(clipA);

效果图:

设置了反转的代码3:

CCSprite*bg=CCSprite::create("background.png");CCSprite*stencilA=CCSprite::create("smallcircle.png");CCClippingNode*clipA=CCClippingNode::create();clipA->setStencil(stencilA);clipA->addChild(bg);clipA->setAlphaThreshold(GLfloat(0.5f));clipA->setInverted(true);clipA->setAnchorPoint(ccp(0,0));clipA->setPosition(ccp(300,300));this->addChild(clipA);

效果图:

CCClippingNode源码分析

后面用到了在仔细分析吧。

先贴个网址【 http://blog.csdn.net/crazyjumper/article/details/1968567 】

更新【2014年5月8日11:38:06】

CCClippingNode中的Stencil节点的位置

首先看下CCSprite的部分代码,通过这部分代码,我们可以知道,CCSprite在有texture的时候,默认锚点和默认位置分别为【0.5,0.5】和【0,0】:

constCCPoint CCPointZero=CCPointMake(0,0);。。classCC_DLLCCSprite:publicCCNodeRGBA,publicCCTextureProtocol 。。classCC_DLLCCNodeRGBA:publicCCNode,publicCCRGBAProtocol 。。CCNode::CCNode(void)。。。。,m_obPosition(CCPointZero),m_obAnchorPointInPoints(CCPointZero),m_obAnchorPoint(CCPointZero)。。。。// designated initializerboolCCSprite::initWithTexture(CCTexture2D*pTexture,constCCRect&rect,boolrotated){。。。// default transform anchor: centersetAnchorPoint(ccp(0.5f,0.5f));。。。}

那么stencil的绘制位置是如何确定的,看下CCClippingNode的部分代码:

voidCCClippingNode::setStencil(CCNode*pStencil){CC_SAFE_RELEASE(m_pStencil);m_pStencil=pStencil;CC_SAFE_RETAIN(m_pStencil);}voidCCClippingNode::visit(){。。。。。 。。。。。// draw the stencil node as if it was one of our child// (according to the stencil test func/op and alpha (or alpha shader) test)kmGLPushMatrix();transform();m_pStencil->visit();kmGLPopMatrix();。。。。。 。。。。。}

这里就很明显了,Stencil在绘制时是作为CCClippingNode的子节点绘制的

我们这样看下最简单的代码:

CCSprite*background=CCSprite::create("background.jpg");CCSprite*stencil=CCSprite::create("stencil.png");CCClippingNode*clipA=CCClippingNode::create();clipA->setStencil(stencil);clipA->addChild(background);//==>>background的锚点(0.5,0.5),位置(0,0)//==>>stencil的锚点(0.5,0.5),位置(0,0)

这里可以知道background和stencil都是clipA的子节点,而且锚点和位置都相同,那么它们都会被绘制到clipA的中心位置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 9:56:51

Python逆向QQ音乐加密参数:vKey与sign生成原理与实战

1. 项目概述:为什么我们要研究QQ音乐的加密参数?如果你尝试过用Python写个脚本,想批量下载QQ音乐上的歌曲或者获取高音质音频链接,大概率会卡在第一步:那些看似随机的请求参数。尤其是vKey和sign这两个家伙&#xff0c…

作者头像 李华
网站建设 2026/7/16 9:54:54

工业AI视觉系统C++后端架构:从模块化设计到Qt Quick集成实践

1. 项目概述与C的角色定位 最近在做一个挺有意思的工业项目,一个基于Qt Quick的AI螺丝瑕疵检测系统。很多朋友看到“Qt Quick”和“AI”,第一反应可能是用Python或者JavaScript来搞定前端和算法,后端随便糊弄一下。但真正在工业现场跑过的人都…

作者头像 李华
网站建设 2026/7/16 9:54:22

Windows高效工具与系统优化全攻略

1. Windows装机必备软件全景指南作为从Windows 95时代就开始折腾系统的老用户,我见证了这个操作系统生态的演进历程。每次重装系统后,总有些软件像老朋友一样必须第一时间请回电脑里——它们或是效率提升的利器,或是系统优化的神器&#xff0…

作者头像 李华
网站建设 2026/7/16 9:53:18

必剪字幕识别优化:贵州方言视频自动转文本实战指南

最近在视频剪辑时遇到一个有趣的问题:用必剪自动识别贵州车牌相关视频的字幕,结果发现识别结果和预期有较大出入。这种情况其实在很多方言、专业术语或特定场景的视频中都很常见。本文就围绕这个实际问题,完整拆解必剪字幕识别的技术原理、优…

作者头像 李华
网站建设 2026/7/16 9:52:50

Ubuntu系统安装与配置全指南

1. Ubuntu系统安装前的准备工作 第一次接触Ubuntu系统安装时,我完全低估了准备工作的重要性。直到在实体机上反复安装失败三次后,才真正明白"工欲善其事,必先利其器"的道理。现在每次安装新系统前,我都会严格检查以下环…

作者头像 李华