cocos2dx(很多人说cocos2dx坑,到底坑在哪)
本文目录
很多人说cocos2dx坑,到底坑在哪
这个说的有点过了。毕竟现状是U3D和cocos2dx各司其职,在不同领域处于领导地位。但是目前也可以看到unity2d发展的不错,我有个朋友就从cocos2dx转到unity2d了。 个人认为cocos2dx的弱项在于首先是C++编写代码,难住一票人。
cocos2dx 有哪些bug
先说bug触发的条件:
先为一个节点设置了剪裁,但是在动画中,需要更新这个剪裁的形状,然后再以这个新的形状设置剪裁。
bug代码:
clip_front_-》setStencil(pfront);
运行的时候,我收到了一个来自mac版本的运行抱怨,他抱怨以上代码总是崩。但是我的是以windows非库源码形式编译的,所以没有发生这个问题。
收到反馈后,我把代码拷贝到带cocos2dx源码运行的项目中,果不其然。。。。(在此奉劝大家,千万不要图省事,一定要以库源码的形式编译,因为这个库很多bug。。而你也有能力修正它)
我们来看setStencil的内部实现:
void ClippingNode::setStencil(Node *stencil)
{
CC_SAFE_RETAIN(stencil);
CC_SAFE_RELEASE(_stencil );
_stencil = stencil;
}
咋一看没什么问题,问题出来以前我也不觉得这里有啥问题。
现在我对任何不加入资源管理的离散节点的release表示怀疑,因为我不懂它内部运行的机制。
事实上当内部stencil正在使用的时候,简单的析构它一定会导致问题。assert还算好的,运行时崩溃才是让人崩溃的。因为你不能准确定位到问题发生的地方。
于是代码修正如下:
void ClippingNode::setStencil(Node *stencil)
{
CC_SAFE_RETAIN(stencil);
Node* ptemp = _stencil;
if (ptemp)
{
ptemp-》stopAllActions();
ptemp-》onExit();
}
_stencil = stencil;
CC_SAFE_RELEASE(ptemp);
}
node析构中的 !running assert消失了。问题解决。运行没有发现内存泄露
cocos2d和cocos2dx有什么区别吗
cocos2d是OC写的,cocos2dx是c++写的
cocos2d只能在ios下运行,cocos2dx是跨平台的,ios和android平台都可以运行
cocos2d是外国人搞的,cocos2dx是中国人搞的。
cocos2dx是cocos2d的C++写法,但是游戏架构是一样的,都包含了精灵,导演,场景,动作等概念,他们是一脉相承的东西。你可以直接研究cocos2dx,没有什么障碍。虽然是有了cocos2d才有的cocos2dx,但是cocos2dx包含了cocos2d的主要思想,因此可以直接研究cocos2dx。
更多文章:
easyanticheat是啥(eaanticheat启动慢)
2024年7月4日 00:00
windows rt(联想windowsRT可以改成win8的系统吗 )
2024年7月17日 06:42
股票入门基础知识图解(股票k线图入门图解股票k线图入门图解)
2024年6月30日 13:51
xls和xlsx哪个好用(excel表格后缀xlsx和xls的区别)
2024年7月15日 09:18
treeview添加子节点(如何通过代码给treeview添加子节点(C#))
2024年6月6日 00:39
工业机器人INC和DEC指令的功能是什么?汇编语言 DEC指令 要把数转为二进制吗
2024年7月3日 01:49
final在java中的作用(JAVA中final的作用及意思分别是什么)
2024年7月15日 07:06
kindeditor编辑器视频上传(kindeditor富文本编辑器怎样上传flash)
2024年3月17日 06:25