【新手求助】子弹飞出屏幕,哪种方案性能更高?

打灰机游戏的子弹,飞出屏幕后要收集到节点池中,使用哪种方案性能更高?

1、 屏幕外放一圈碰撞体,用碰撞体监听飞出的子弹
2、子弹脚本中update判断位置是否超出屏幕之外

  • 方案1
  • 方案2

0 投票者

以前写代码的时候也想过方案1,但是后来研究下来发现根本就是脱裤子放屁,用碰撞体往往每帧需要更多的判断

1赞

update检测位置的这点计算量,比碰撞的计算量小太多了。你怕一直计算。 你可以在子弹射出后一秒再启动计算。这样所有的子弹都不会立刻计算,相当于把子弹计算时间错开了。

您的意思是每隔一段时间,遍历所有子弹吗? 判断哪些移出屏幕之外?

显然是的,用碰撞体本质上还是需要每帧去遍历场景所有子弹,就算再优化,加上各种剪纸,性能也绝对不会比只用位置去计算是否出界这件事高

private _countTime = 0;

update(dt) {

    this._countTime += dt;
    if (this._countTime >= 1) {

        //进行复杂判断
    }

}

不用去“遍历”,子弹是一个独立的东西。射出去以后,要处理的逻辑子弹自己判断。不要统一遍历。
假设1w个子弹,你去遍历一遍,这一帧你需要大量计算,这一帧就会卡.
子弹射出去以后,1s过后子弹各算各的,因为射出去的时间不一样,子弹开始计算的时间也不一样。
这样可以把1w个子弹计算错开

UNITY中可以使用OnBecameInvisible简单实现判断离开相机视野的功能,cocos中不知道有没有对应的。感觉也没必要做这个功能,早几秒晚几秒回收意义不是很大,我一般都是倒计时n秒没击中就自动回收。当然要是玩法这么要求当我没说。

1赞

给子弹加个lifetime属性,比如赋值3s,3s倒计时完成后就回收该子弹。飞行慢的lifetime设长点。

2赞

还是新手的时候,就觉得碰撞体可以直接检测到碰撞,性能好到爆啊!
直到有一天研究发现了计算碰撞的方式,直接汗颜 :rofl:

当年我也是这样 :laughing:

碰撞检测迭代太多了,直接update判断位置