关于2.2.3cocostudio控件不能使用ccfade动画的解决方案

今天将引擎从2.2.2升级到了2.2.3,发现imageview等ui控件的ccfade动画不起作用
看了下源码,发现2.2.3中widget是继承自CCNode,而不是2.2.2中的CCNodeRGBA了
而ccfade的update中是这样实现的:

void CCFadeOut::update(float time)
{
CCRGBAProtocol pRGBAProtocol = dynamic_cast<CCRGBAProtocol>(m_pTarget);
if (pRGBAProtocol)
{
pRGBAProtocol->setOpacity(GLubyte(255 * (1 - time)));
}
/m_pTarget->setOpacity(GLubyte(255 * (1 - time)));/
}

Widget继承自CCNode, dynamic_cast一定会返回空,所以动画没有效果

解决方法是再CCNode中添加setOpacity:
virtual void setOpacity(GLubyte opacity) {}

修改CCFadeIn和CCFadeOut的代码:
void CCFadeIn::update(float time)
{
m_pTarget->setOpacity((GLubyte)(255 * time));

}

void CCFadeOut::update(float time)
{
m_pTarget->setOpacity(GLubyte(255 * (1 - time)));

}

最后吐槽一下,虽然我没有仔细的阅读全部源代码,但是可以看出这部分修改主要是向3.0靠拢,
但是3.0中Node实现了setOpacity,所以3.0中没有bug。
作为cocos2dx的忠实使用者,真心希望引擎每次更新至少要保证测试充分,不要让我们使用者再这些
小问题上浪费时间,最后衷心祝福cocos2dx发展越来越好

老实说,我也觉得widget该继承CCNode……不过我刚习惯了2.2.2,结果2.2.3就又改结构 :9:

之前的版本有过将UILayout改成Layout这种改编类名的情况,还有过将UILayout.cpp改成Layout.cpp,后来又该回来的情况,
直接导致工程升级及其复杂

还有过这样的情况,之前版本的layout是基于CCClipNode的,后来又改成不依赖CCClipNode了,直接导致我原来一些特性得重新
开发一便

现在每次升级引擎都很蛋疼,已经无力吐槽了

现在公司的项目还在前中期,所以这些改动对我影响还不算太大,集体替换就好了……
不过公司只有我一个人愿意去学,Cocos2d和CocoStudio的变动我都要自己关注,有时候真的是忙不过来 :3:

我现在碰到这种问题,我试了一下这个解决方案,没有起作用呀!我的UI动画就是由一个透明状态,渐变成不透明,开始一段时间是透明的(会透明显示一段时间)。

mark`:2:

你的方法试过了 不对 而且你在ccnode中添加 虚函数 很多类都需要去实现 这个方法 我写了 空实现 但是 你这个还是不对

多谢楼主提醒。
看来html5的2.2.3的bug也是同样原因。
换回2.2.2就能正常使用半透明动画了。