使用setActive代替addChild性能相差无几

  • Creator 版本:2.0.9

  • 目标平台: 微信小游戏

  • 详细报错信息,包含调用堆栈:

  • 重现方式:未能重现,只在该项目中出现

跑酷游戏,游戏拥有四个背景节点循环移动,在某个背景节点位置超出限制时生成障碍物(最多32个障碍物)
一开始使用对象池生成障碍物节点,然后bg.addChild()添加入该背景节点,在生成障碍物时会出现一瞬间卡顿
使用chrome测得运行时间如下

后面就在背景节点下先新建好32个障碍物节点,并把障碍物节点的active设为false,在需要生成障碍物时,将一定数量的障碍物设置成true,但是并未改善卡顿现象
使用chrome测得运行时间如下

  • 问题:请教下还能如何优化,谢谢!!!!

使用opacity控制显示隐藏

障碍物有碰撞的,改不透明度的话,还得去开关碰撞组件,可能解决卡顿吗

分帧创建,不要一次性创建那么多,不需要立即显示的先不创建。

分帧创建是指怎么做呢,之前是试过加定时器,每0.1秒创建一个障碍物,但是效果并不理想,在创建时依旧是卡顿

同理不要去开关碰撞,碰撞后检测是否已经隐藏

使用对象池,循环使用物体,物体回收的时候不用从节点中移除,再利用的时候修改位置属性。
距离判断,判断距离将要到达某个物体,再将该物体显示出来。
不清楚你那设置active为什么会觉得卡,可能你物体上有碰撞框需要物理系统重新计算。你可以用楼上说的用透明度来判断物体的激活状态。
不需要物理效果,可以用碰撞系统来代替物理系统。

按您的方法解决了,谢谢大佬!

我也不清楚为什么设置active会卡顿,不过调试的时候确实发现设置active和设置父节点所用的时间竟然一样,用了楼上的方法确实解决了,谢谢帮助!