今天将引擎从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发展越来越好