cocos2d-x 阶段性bug总结

前端之家收集整理的这篇文章主要介绍了cocos2d-x 阶段性bug总结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

抽时间,总结一些bug和一些需要注意的地方。

1)计时器:update

第一次scheduleupdate之后并没有立即执行update,而是在渲染完视图资源以后才启动的,所以,第一次的dt时间值可能很大,甚至十几秒。

2)const 与 宏CC_SYNTHESIZE的结合:

  1. constint*p;//同intconst*p,const在*左边,则修饰“指向的内容”,内容不可变,指针本身可变向
  2. int*constp;//指针本身不可变

copy
    //CC_SYNTHESIZE的使用要慎重,类型使用const要慎重
  1. #defineCC_SYNTHESIZE(varType,varName,funName)\
  2. protected:varTypevarName;\
  3. public:virtualvarTypeget##funName(void)const{returnvarName;}\
  4. virtualvoidset##funName(varTypevar){varName=var;}
注意: protected: varType varName;

3)lua错误

“invalid 'self' in function 'getChildByName'”的出现,说明调用函数“getChildByName”的self对象数据已被删除,self对象指针变成野指针。

4)自己写的set方法传入对象指针的问题:

    setObject(Object*obj)
  1. {
  2. /*通常要手动retain一次,避免外部obj的释放导致本地指针变为野指针*/
  3. obj->retain();
  4. /*...*/
  5. }


5)异步线程的加载问题要始终保持警惕(死锁阻塞)。


6)UI系列控件手动创建的不响应触摸的问题:

UI系列的控件,手动创建后,必须添加到UILayer中,才能监听到触摸(触摸允许true时)。

UILayer* ly;Widget* w;ly->addWidget(w); CCLayer* layer;layer->addChild(ly);


7)触摸响应的顺序只与“优先级有关”,与层之间的z轴即遮挡顺序无关,而且与节点的父子关系也无关。

setTouchPriority(-128)直接调整优先级,除此之外触摸的传递条件还与如下有关:

①触摸代理中的是否吞噬参数:

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(myLayer,-1000,true);

ccTouchBegan():

返回false:吞噬触摸将不起作用,直接穿透且传递触摸

返回true:以①中的吞噬开关为准


8)控件层叠的触摸穿透顺序:

层A在层B上方,默认的优先级是:A上的子控件-》B上的子控件-》A的最底层-》B的最底层

所以,如果我们让A层吞噬掉触摸的话,只有B层接收不到,但是无论A或B,其子控件都能接收到。


9)convertToWorldSpace

A->convertToWorldSpace(S->getPosition());//A在父节点中坐标 + S在父节点中的坐标,因此一定要确定好应该用谁调用convertToWorldSpace方法,通常用s的父节点调用,来转换为世界坐标。

如果用自身调用,返回值是在父节点中的坐标加上自身的世界坐标值(引擎会算出),因此如果自身在父节点中的坐标不是(0,0),也就是已有坐标数值,那么这时如果用自身调用方法会多出一个自身的坐标(这里说的情况是锚点在正常位置(0.5,0.5))。

通过getParent()->convertToWorldSpace就可以将这个坐标转换成游戏的绝对坐标。

调用getParent()->convertToNodeSpace即可转换回相对坐标。


资源错误

1》资源没有导入项目或者没有更新。
2》资源路径错误
3》资源名字有问题:含有空格、大小写、类型后缀大小写
一个完整项目下来,个人感觉cocos2dx虽然有坑,但通过改改底层基本都能解决,而遇到费时间的问题大体就以上那么多吧,再有就是一些比如换行、链表的刷新和排序之类的,总体来说难点不是太多。也可能很多知识接触的少,用的少吧,继续学习。

最后:改bug的心态要静,因为到最后你会发现,最难改的bug往往是那种最低级的错误,而且出错的可能无处不在,勤动手尝试,而不是光分析可能性。

"一行一行代码的去测"有时候可能是最有效的。

猜你在找的Cocos2d-x相关文章