看到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对所有子节点设置透明度相关推荐

  1. js遍历树节点下的所有子节点_【数据结构与算法】(3)——树和二叉树

    树 树的基本概念 树是一种非线性的数据结构,样子如图所示: 树的主要特点是树中的数据是分层存储的,每个元素称为树的节点,最顶层有且只有一个元素,称为根节点,其余层可以有任意数量的节点.除了根节点,其余 ...

  2. js遍历树节点下的所有子节点_「Javascript数据结构」× 二叉搜索树

    目录 树的相关术语 二叉树和二叉搜索树 二叉树的遍历 二叉搜索树的搜索 二叉搜索树的移除 「 树的相关术语 」 一个树结构包含一些列存在父子关系的节点.每个节点都有一个父节点(除了顶部的第一个节点)以 ...

  3. Oracle树查询(查询所有子节点,父节点等等)_转载

    Oracle树查询(查询所有子节点,父节点等等) 转载 2016年01月14日 10:11:55 Oracle树查询的最重要的就是select...start with... connect by . ...

  4. uniapp树组件优化 树节点设置单选,单击单选框可以选中多个 偶尔根节点点击后会隐藏整棵树

    在上篇文章的组件基础上做了两个调整 1.处理偶尔根节点点击后会隐藏整棵树的情况,lastRank是判断是否是最后一级,但是如果是根节点的话是不会有lastRank 2.处理树节点设置multiple是 ...

  5. css设置透明度的两种方法

    一.css rgba()设置颜色透明度 语法: rgba(R,G,B,A); RGBA 是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha(不透明度)三个单词的缩写.RGBA 颜 ...

  6. css如何设置透明度?两种方法

    一.css rgba()设置颜色透明度 语法: rgba(R,G,B,A); RGBA 是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha(不透明度)三个单词的缩写.RGBA 颜 ...

  7. css如何设置透明度

    css如何设置透明度 今天面试遇到了一个之前写css样式时没太注意的问题,关于css如何设置透明度.两种方法如下: css设置透明度的方法:1.使用rgba()设置颜色透明度,语法"back ...

  8. css如何设置透明度?设置透明度的两种方法(代码实例)

    在前端页面开发布局的时候,为了给用户呈现不同的效果,经常需要设置透明度,那么css是怎样设置透明度的?本章给大家介绍用css设置透明度的两种方法(代码实例).有一定的参考价值,有需要的朋友可以参考一下 ...

  9. ztree指定节点 设置复选框

    ztree指定节点 设置复选框 首先,需引入ztree的js文件 <script src="../../assets/ztree/js/jquery.ztree.core-3.5.mi ...

最新文章

  1. 猖狂!微软、思科源码惨遭黑客 100 万美元打包出售
  2. hbuilder入门之基本配置(php)
  3. QTP之web常用对象
  4. C++11正则表达式例子集合
  5. curl循环监控_阿里巴巴开源性能监控神器Arthas
  6. codeforces1208 F. Bits And Pieces(SOS DP)
  7. jooq权限配置_将jOOQ与Spring结合使用:配置
  8. 在Java中对Singleton类进行双重检查锁定
  9. 浅谈c++静态绑定、动态绑定
  10. python装逼_能够让你装逼的10个Python小技巧
  11. 吴恩达机器学习 12.异常检测
  12. XShell——使用
  13. pointnet源码阅读:数据预处理
  14. Python自然语言处理 8 分析句子结构
  15. 关于QQBot机器人掉线问题修复
  16. Mac OSX 升级python six模块版本
  17. 出租屋管理员计算机测试,出租屋管理员的个人工作总结
  18. uni-app学习笔记(一):HbuildX+uni-app搭建小程序项目
  19. Tita OKR:不可或缺的工作法看板
  20. Java充电篇:Java IO常见的面试题

热门文章

  1. 如何快速打造高性能对话式AI?这个NLP公开课带你从入门到进阶,快来报名
  2. 真正的中台价值,「炒作」之后才被看见
  3. MIT人工智能独立设系!拆分EECS为EE、CS、AI+决策三部分,直接归学院管理
  4. 前端小姐姐助你俘获女神心,双十一挑口红神器在此 | 开源项目
  5. 哈佛新研究登上Science封面:这个机械外骨骼,是一条“轻功”短裤
  6. 让你的AI绿起来,艾伦研究所提出深度学习效率评估标准Green AI
  7. 200米外遥测心跳确定身份,五角大楼全新黑科技,比人脸识别更准、伪装也没用...
  8. DOM渲染的详细过程 1
  9. asp.net mvc Post上传文件大小限制 (转载)
  10. 正则表达式 字符转义