算了!每个人思路不一样,想法也不一样!
##moveto的本质也是在update中setposition,我想用moveto并不能解决性能的问题。相反,自己控制setposition,也要灵活好多。
###有个比较简单的优化策略,这边的蛇是由若干节点拼接而成的,在移动过程中可以只处理后面的节点,某一个节点的位置下一帧仍然有节点的情况就可以不用修改位置;只需要把后面的节点填充有位置改变的节点位置即可。这样应该可以减少需要修改位置节点的数量。
###像这样:
####移动方------------------>
CBBBBBBBBBBBBBBBBBBA
_BBBBBBBBBBBBBBBBBBCA
####这个过程只调整了A和C的位置
很简单,大量节点目前Creator是不太支持的,就算放在原来的cocos2dx C++,上千个节点也是承受不了的。
还好,用cocos2dx 3.12已经解决卡顿问题
对游戏逻辑和性能优化后,已经能保持在55帧左右了
请问一下:地图上有几百个点,每个点都要检测与蛇头之间的距离(距离近就被蛇吃掉),这样会导致很卡,这是怎么解决的? 还有蛇的移动我是用一个数组保存蛇头经过的位置,蛇的身体根据这个数组setPosition(),这会带来一个问题,游戏只要稍微卡一下蛇就会“断掉”,能说下蛇移动的解决方法吗? 谢谢~~
有一个简单易行的办法,将生成的新节点做成一个动画,只有两针,效果是前后错位,然后在放下该节点的时候调整方向即可
或者,节点自己挂一个脚本,脚本内容是每n针向前移动x个单位,再过n针向后移动x个单位,在放下该节点时调整方向
第一种方法可能会非常好用,第二种比较吃cpu
节点与节点之间距离保持固定值
嗯嗯,多谢指正,动画效果应该是颜色变化,而不是前后错位
谢谢你的意见,不过你的做法做需要各种换皮肤的话就会有问题了。大量切换纹理效率比计算位置更差
点与点保持恒定距离的话在旋转转圈的时候就会绕着一个点不停转动了,然后后面的节点就会全部停止运动。谢谢
楼主是怎么解决的,是把移动放到了c++上了吗?
请问用c++怎么写?我试了下jsb好像Action等js对象可以作为参数传进来,但cc.Node就有问题
请问谁有用c++写的demo吗?怎么都拿不到cc.Node
我的贪吃蛇也是1000个节点同时动,安卓真机上跑就只有40帧,现在也还是要用C++再做一遍了
解了一下贪吃蛇大作战的包,发现里面没有cocos2dx的so库,说明不是用cocos2dx开发的,这让我有点惊讶,而且包非常小,资源也没加密,看资源的分布,应该是用Java开发的,Java引擎一般是libgdx、andengine或者其他,游戏里面我试过蛇身上千个节点没有感到丝毫卡顿,玩上几个小时手机不发烫。如果用c++的cocos2dx来写,除非极致的优化,不然很难达到这个效果。看了下它里面的资源,所有图片并没有合一起,都是散图,这意味着在cocos2dx里面,每个节点都是一个drawcall,这要达到顺畅,估计有点难,我试过cocos2dxC++版的5000个空节点每帧一起移动,电脑上帧率都有点问题了……不清楚是作者花了大量心思去优化的还是引擎本身就是极致的优化,这让我有点匪夷所思。
这游戏另外一个难点是,里面的碰撞检测,里面只有圆与圆的检测,但是这游戏不可能用物理引擎来帮你检测,box2d和 chipmunk都无法达到这个效果,200个圆就开始卡顿了……也就是说里面的碰撞算法要么用了其他我不知道的碰撞检测引擎,要么自己写了一套,要么用像素检测。如果是单纯的圆检测,这计算量如果没有优化过也是恐怖至极,因为每条蛇的节点需要跟别的蛇头进行检测,还需要跟场景的食物点进行检测,蛇与蛇的节点检测复杂度就已经是n的平方了。
这游戏看起来简单,实际上真要做到原作者的那个程度,并不容易……不花一定的心思,是没法解决流畅度的问题。
是的,这做为我学习游戏开发的第一个游戏,我觉得这个游戏内脏特别全,该有的都有,很多人都觉得简单,其实里面的东西要优化的东西太多了,性能问题很严重,我现在还是在用H5测试的,对于一个新人来说,简直想哭,
圆圆检测是消耗资源最小的碰撞吧。。。