cocos2d-x 阶段性bug总结

cocos2d-x 阶段性bug总结,第1张

概述抽时间,总结一些bug和一些需要注意的地方。 1)计时器:update 第一次scheduleupdate之后并没有立即执行update,而是在渲染完视图资源以后才启动的,所以,第一次的dt时间值可能很大,甚至十几秒。 2)const 与 宏CC_SYNTHESIZE的结合: [cpp]  view plain copy const int* p;//同int const * p,const在*左

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

1)计时器:update

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

2)const 与 宏CC_SYNTHESIZE的结合:

[cpp] view plain copy constint*p;//同intconst*p,const在*左边,则修饰“指向的内容”,内容不可变,指针本身可变向 int*constp;//指针本身不可变

copy //CC_SYNTHESIZE的使用要慎重,类型使用const要慎重 #defineCC_SYNTHESIZE(varType,varname,funname)\ protected:varTypevarname;\ public:virtualvarTypeget##funname(voID)const{returnvarname;}\ virtualvoIDset##funname(varTypevar){varname=var;} 注意: protected: varType varname;

3)lua错误:

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

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

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


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 阶段性bug总结全部内容,希望文章能够帮你解决cocos2d-x 阶段性bug总结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1061025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存