cocos2dx对所有子节点设置透明度
看到cocos2dx2.2.5发布了,修复了输入框的bug,于是我们的项目也升级到了2.2.5,
升级过程还是比较顺利,没想到后来发现设置透明度无效了。
经过调试发现要调用一下setCascadeOpacityEnabled(true),结果还是没有效果,
又继续调试,原来noe没父节点不会更新自己的透明度,于是改为如下:
void CCNode::setOpacity(GLubyte opacity){m_displayedOpacity = m_realOpacity = opacity;if (m_cascadeOpacityEnabled){GLubyte parentOpacity = 255;if (m_pParent && m_pParent->isCascadeOpacityEnabled()){parentOpacity = m_pParent->getDisplayedOpacity();}else //这里没有父节点也更新 {this->updateDisplayedOpacity(opacity);return;}this->updateDisplayedOpacity(parentOpacity);}}
因为我们的代码里好多地方都是设置好节点的属性后再addchild,如果不这么改,好多地方
都要修改。感觉这个设计有点坑人。
但是发现还是不行,原来在updateDisplayedOpacity还会判断isCascadeOpacityEnabled,
这样如果有一个子节点的开关是false,就不能更新透明度了。
然而,我们是从ccb里读取的,不知道ccb里有多少个子节点,所以便修改读取ccb的代码,
286行
CCDICT_FOREACH(animationManagers, pElement)
{
CCNode* pNode = (CCNode*)pElement->getIntKey();
pNode->setCascadeOpacityEnabled(true);//打开透明度
727行
/* Read and add children. */
int numChildren = this->readInt(false);
for(int i = 0; i < numChildren; i++) {
CCNode * child = this->readNodeGraph(node);
child->setCascadeOpacityEnabled(true); //打开透明度
node->addChild(child);
}
由于默认关闭透明度,setOpacity无效,这个函数真是名不副实,既然我们要设置透明度,
那么就应该给打开。不吐槽了。
后来想,可以直接添加一个setOpacityAll函数,之间对所有子节点设置透明度,也不需要
再次调用setCascadeOpacityEnabled。
在ccnode.h里添加一个保护成员bool m_opacityAll,在构造函数初始化列表里初始化为false。
void CCNode::setOpacityAll(GLubyte opacity){m_cascadeOpacityEnabled=true;m_opacityAll=true;setOpacity(opacity);//这个set要和上面一样修改,如果不修改只能在addchild后才能调用 }
修改updateDisplayedOpacity如下
void CCNode::setOpacityAllEnabled(bool flag) {m_opacityAll=flag; } void CCNode::updateDisplayedOpacity(GLubyte parentOpacity) {m_displayedOpacity = (GLubyte)(m_realOpacity * parentOpacity/255.0);if (m_cascadeOpacityEnabled){CCObject* pObj;CCNode* pNode;CCARRAY_FOREACH(m_pChildren, pObj){if ( m_opacityAll){pNode=dynamic_cast<CCNode*>(pObj);pNode->setCascadeOpacityEnabled(true);pNode->setOpacityAllEnabled(true);pNode->updateDisplayedOpacity(m_displayedOpacity);}}} }
这样就可以对所有子节点设置透明度了,其实可以直接修改setopacity的代码,但是不知道是否有其它影响
所以只好又加了个setopacityall的开关,这样不需要传递的还可以用setopacity。
cocos2dx对所有子节点设置透明度相关推荐
- js遍历树节点下的所有子节点_【数据结构与算法】(3)——树和二叉树
树 树的基本概念 树是一种非线性的数据结构,样子如图所示: 树的主要特点是树中的数据是分层存储的,每个元素称为树的节点,最顶层有且只有一个元素,称为根节点,其余层可以有任意数量的节点.除了根节点,其余 ...
- js遍历树节点下的所有子节点_「Javascript数据结构」× 二叉搜索树
目录 树的相关术语 二叉树和二叉搜索树 二叉树的遍历 二叉搜索树的搜索 二叉搜索树的移除 「 树的相关术语 」 一个树结构包含一些列存在父子关系的节点.每个节点都有一个父节点(除了顶部的第一个节点)以 ...
- Oracle树查询(查询所有子节点,父节点等等)_转载
Oracle树查询(查询所有子节点,父节点等等) 转载 2016年01月14日 10:11:55 Oracle树查询的最重要的就是select...start with... connect by . ...
- uniapp树组件优化 树节点设置单选,单击单选框可以选中多个 偶尔根节点点击后会隐藏整棵树
在上篇文章的组件基础上做了两个调整 1.处理偶尔根节点点击后会隐藏整棵树的情况,lastRank是判断是否是最后一级,但是如果是根节点的话是不会有lastRank 2.处理树节点设置multiple是 ...
- css设置透明度的两种方法
一.css rgba()设置颜色透明度 语法: rgba(R,G,B,A); RGBA 是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha(不透明度)三个单词的缩写.RGBA 颜 ...
- css如何设置透明度?两种方法
一.css rgba()设置颜色透明度 语法: rgba(R,G,B,A); RGBA 是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha(不透明度)三个单词的缩写.RGBA 颜 ...
- css如何设置透明度
css如何设置透明度 今天面试遇到了一个之前写css样式时没太注意的问题,关于css如何设置透明度.两种方法如下: css设置透明度的方法:1.使用rgba()设置颜色透明度,语法"back ...
- css如何设置透明度?设置透明度的两种方法(代码实例)
在前端页面开发布局的时候,为了给用户呈现不同的效果,经常需要设置透明度,那么css是怎样设置透明度的?本章给大家介绍用css设置透明度的两种方法(代码实例).有一定的参考价值,有需要的朋友可以参考一下 ...
- ztree指定节点 设置复选框
ztree指定节点 设置复选框 首先,需引入ztree的js文件 <script src="../../assets/ztree/js/jquery.ztree.core-3.5.mi ...
最新文章
- 猖狂!微软、思科源码惨遭黑客 100 万美元打包出售
- hbuilder入门之基本配置(php)
- QTP之web常用对象
- C++11正则表达式例子集合
- curl循环监控_阿里巴巴开源性能监控神器Arthas
- codeforces1208 F. Bits And Pieces(SOS DP)
- jooq权限配置_将jOOQ与Spring结合使用:配置
- 在Java中对Singleton类进行双重检查锁定
- 浅谈c++静态绑定、动态绑定
- python装逼_能够让你装逼的10个Python小技巧
- 吴恩达机器学习 12.异常检测
- XShell——使用
- pointnet源码阅读:数据预处理
- Python自然语言处理 8 分析句子结构
- 关于QQBot机器人掉线问题修复
- Mac OSX 升级python six模块版本
- 出租屋管理员计算机测试,出租屋管理员的个人工作总结
- uni-app学习笔记(一):HbuildX+uni-app搭建小程序项目
- Tita OKR:不可或缺的工作法看板
- Java充电篇:Java IO常见的面试题
热门文章
- 如何快速打造高性能对话式AI?这个NLP公开课带你从入门到进阶,快来报名
- 真正的中台价值,「炒作」之后才被看见
- MIT人工智能独立设系!拆分EECS为EE、CS、AI+决策三部分,直接归学院管理
- 前端小姐姐助你俘获女神心,双十一挑口红神器在此 | 开源项目
- 哈佛新研究登上Science封面:这个机械外骨骼,是一条“轻功”短裤
- 让你的AI绿起来,艾伦研究所提出深度学习效率评估标准Green AI
- 200米外遥测心跳确定身份,五角大楼全新黑科技,比人脸识别更准、伪装也没用...
- DOM渲染的详细过程 1
- asp.net mvc Post上传文件大小限制 (转载)
- 正则表达式 字符转义