【Cocos2d-x】3.3 ClippingRectangleNode与ClippingNode 以及 ClippingRectangleNode BUG
来源:互联网 发布:侠客风云传 战斗数据 编辑:程序博客网 时间:2024/06/04 18:58
在Cocos2d-x 的3.3 版本中,添加了一个新类 ClippingRectangleNode,此类与ClippingNode,均有裁剪作用。两个类做裁剪时有不同的适用背景。区别如下:
ClippingRectangleNode
ClippingNode
裁剪区域
只能为矩形
任意图形
效率
高
低,使用较多时,容易导致低端机掉帧
适用场景
出现数量较多,且对裁剪图形要求不高时
出现数量少,对裁剪区域要求较高时。(例如游戏新手引导)
灵活性
使用简单,灵活性低
较为灵活
在使用过程中,发现一个ClippingRectangleNode的bug,该bug导致ClippingRectangleNode或是其上层节点有进行缩放时,会使ClippingRectangleNode的裁剪区域变得异常。
相关代码如下:
void ClippingRectangleNode::onBeforeVisitScissor(){ if (_clippingEnabled) { glEnable(GL_SCISSOR_TEST); float scaleX = _scaleX; float scaleY = _scaleY; Node *parent = this->getParent(); while (parent) { scaleX *= parent->getScaleX(); scaleY *= parent->getScaleY(); parent = parent->getParent(); } const Point pos = convertToWorldSpace(Point(_clippingRegion.origin.x, _clippingRegion.origin.y));<span style="white-space:pre"></span>// 将裁剪区域的原点转为世界坐标系 GLView* glView = Director::getInstance()->getOpenGLView(); glView->setScissorInPoints(pos.x * scaleX, pos.y * scaleY, _clippingRegion.size.width * scaleX, _clippingRegion.size.height * scaleY); }}
开发人员在将裁剪区域的原点正确的转为世界坐标系之后, 又乘了scaleX 和 scaleY, 这就导致裁剪区域的原点变得不正常了。 (converToWorldSpace在转换pos时用的变化矩阵已将scale值计算过一次)
修改方法即将
glView->setScissorInPoints(pos.x * scaleX, pos.y * scaleY, _clippingRegion.size.width * scaleX, _clippingRegion.size.height * scaleY);改为
glView->setScissorInPoints(pos.x, pos.y, _clippingRegion.size.width * scaleX, _clippingRegion.size.height * scaleY);
裁剪区域就正常了。
0 0
- 【Cocos2d-x】3.3 ClippingRectangleNode与ClippingNode 以及 ClippingRectangleNode BUG
- cocos2dx DrawNode和ClippingRectangleNode 使用详解
- cocos2d-x ClippingNode
- 【Cocos2d-x】节点裁剪 ClippingNode
- Cocos2d-x 3.x ClippingNode裁剪节点
- cocos2d-x ClippingNode的使用 节点剪裁
- Cocos2d-x 遮罩的实现 : ClippingNode
- Cocos2d-x使用ClippingNode实现遮罩效果
- 【Cocos2d-x 3.2】裁剪节点(ClippingNode)总结
- 【Cocos2d-x 3.2】裁剪节点(ClippingNode)总结
- 【Cocos2d-x 3.2】裁剪节点(ClippingNode)总结
- 【Cocos2d-x 3.2】裁剪节点(ClippingNode)总结
- Cocos2d-x的ClippingNode的最简要使用方法
- cocos2d-x-bug集
- quick - cocos2d 遮罩 ClippingNode
- cocos2d-js使用clippingNode
- cocos2d - JS 遮罩 ( ClippingNode )
- Cocos2d 3.2 中ListView中 使用ClippingNode导致裁剪显示的bug
- Effective C++ (笔记) : 条款05 -- 条款10
- UVa 1583 Digit Generator
- 32位汇编语言学习笔记(44)--显示命令行参数(3)
- FFMpeg框架代码阅读
- zhcon-Ubuntu字符界面(终端tty1-6)中文乱码和分辨率的解决方案
- 【Cocos2d-x】3.3 ClippingRectangleNode与ClippingNode 以及 ClippingRectangleNode BUG
- java中使用MD5对密码进行加密
- Android权限大全
- android IPC通信中的UID和PID识别
- 手机卫士学习15-自定义shape图形资源
- 我的2014年总结——奔波的一年
- 可视分析小记——理解、分析、感悟(持续更新中)
- WV.5-动态链表-查找判断是否存在
- ubuntu 无法挂载ntfs分区-提示:不能访问**GB卷