cocoscreator--snake游戏总结

一、前期思考的问题

1.snake头部的移动,采用action,还是点记录。
2.snake转弯应该采用每帧更新rotation,还是通过action来控制。
3.snake身体单元的跟随,是采用action数组,还是采用记录头部点数组的方式。
4.食物的位置是否需要分区域,是否只渲染单屏节点,计算消耗大还是渲染消耗大。
5.有AI的时候,是否只需要渲染hero这一屏的节点,其他AI的处理方式是什么。
6.碰撞检测是否应该采用自带的碰撞检测系统,还是自己通过数据计算检测碰撞。
7.当采用只渲染当前屏幕的节点的方式时,采用active=true/false、还是opacity=0/255、还是将节点放入对象池中好?

二、过程中遇到的性能问题和之前误解的知识点

1.canvas可以挂载脚本文件。
2.对象池的使用是减少生成节点和毁灭节点时的性能消耗,不需要在一开始就创建最多个数的对象池对象。
3.在数组中存入基础数据,比存入数组性能高,存入ccVec的性能最差。
4.频繁遍历节点树上的节点,十分消耗性能。
5.游戏过程中频繁GC,原先为5秒,通过3、4步的优化,现在为30秒。(固定时间间隔卡顿)
6.action的时间以每帧具体时间分割,为保持多个物体运动一致,尽量让精度为0.01秒。
7.action的回调函数中的target的,是指运动的节点。
8.当设置1秒为60帧时,每帧的时间并不是1/60。现实中每帧的时间都不一样。

三、我采用的方式

1.头部的偏转采用rotateBy的方式,通过回调函数解决频繁偏移的问题。此处不使用stopAction(会有停顿现象)。
2.初始化一个头部数组,通过更新头部每帧的位置到该数组中,并求得每个节点相差的间隔,可以得出每个节点每一帧在该数组中的下标。每帧在记录头部信息的同时,顺移身体节点的位置,可以保证轨迹一致,节点与节点间的间隔不变(即不会出现断开的情况)。在无用节点过多的情况下,要清楚掉,否则内存占用太大,加快gc的到来。
3.对于食物,每帧只渲染当前屏幕,对食物所在的区域进行等比切分,渲染的时候从对象池中取对象,出屏幕后将对象扔回对象池。
4.对于snake,每帧也只渲染当前屏幕,通过tag标识每个身体节点所属的是身体的第几"截"(用以处理蛇身中间某段出屏后无法通过children[i]查找到对象的问题),通过isRendered数组标识该身体节点是否被渲染。
5.snake与snake的碰撞依然采用最普通的遍历所有节点的方式,暂时没有找到更好的方法。
6.snake与食物的碰撞,通过分区域遍历节点的方式进行。

四、心得

    经验不够,还需努力。

你可能感兴趣的:(cocoscreator)