来自未来的注释begin:
问题已不完美解决,解决方案参考3楼和5楼。
来自未来的注释end。
编辑器版本:V1.3.0.1
Cocos2d-x版本:V3.0RC1
当时是这样的:
我很开心地使用UI编辑器生成的UI,并且播放它的动画:
/* 加载UI */
auto UI = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("DNSMGameWinUI_1.ExportJson");
this->addChild(UI);
//播放动画Animation
cocostudio::ActionManagerEx::getInstance()->playActionByName("DNSMGameWinUI_1.ExportJson", "Animation");
播放动画是正常的(顺便一提,UI编辑器的这个功能很赞,很省事~)
如图(好吧,图片是不会动的,大家脑补一下):

然后,点击下一关,当然就切换场景了,切换场景之后,再次出现这个UI并播放动画的时候,就报错了,中断的地方是CCActionNode.cpp的getActionNode函数:
Node* ActionNode::getActionNode()
{
Node* cNode = dynamic_cast<Node*>(_object);
if (cNode != nullptr)
{
return cNode;
}
else
{
Widget* rootWidget = dynamic_cast<Widget*>(_object);
if (rootWidget != nullptr)
{
return rootWidget;
}
}
return nullptr;
}
此时函数中的_object已经是一个不能正常使用的对象了
发现是因为上一次的动画对象并没有释放掉(但是已经不能使用了),ActionManagerEx仍然保留了它的引用(存放在Map中)
于是我再次播放动画的时候,依旧是播放上一次的动画对象,所以就报错了。
我试着这样手动释放所有动画对象:cocostudio::ActionManagerEx::getInstance()->releaseActions();
但是我失败了(不然我也不会在这里了~)
于是,我的疑问是,UI的动画需要我们手动释放吗?或者说,UI本身就需要我们手动释放不?
还是说,这是一个bug?(希望是我的操作问题
)


