屏幕上有300发子弹,50个障碍物,用cocos自带的碰撞检测卡顿很严重,如何优化

屏幕上有300发子弹,50个障碍物,用cocos自带的碰撞检测卡顿很严重,如何优化?

3赞

用的啥碰撞检测。cc.Intersection.rectRect?boxCollider?

啊,这个估计优化也聊胜于无了
大部分传统STG游戏中,一般不会用物理引擎去实现碰撞检测,而是自己写一套
我给你几个贴吧分析链接,你可以学习一下
【弹幕程序科普计划】 第11篇 判定逻辑
【弹幕程序科普计划】 第12篇 判定形状
【弹幕程序科普计划】 第12.5篇 关于正交圆判定的分析
20190529084467_gvyBLE
自己写吧骚年,效率高很多的

3赞

卡顿在什么手机上测的

四叉树。。

AOI或者四叉树

所有手机都卡顿,发射多排子弹,子弹发射速率很快的时候就很卡

你可以看下微信小游戏《机甲运动》的,一个第3关开始,有的时候同屏1500多个怪,100多发子弹,性能应该还好。

我当时最多200子弹······

看楼上~~

用二维划区法做。 游戏划分若干等大小的矩形区域。 求出物体所在的区(这个计算只需简单的四则运算),同区的再检测碰撞。如果跨区就和跨的所有区中的所有物体检测就好了。

(一)优化后:
300子弹,50障碍物。 一共350物体。第一步求区,时间复杂度350。 第二步 假设10个区物体等量(不考虑跨区的情况),每个区35物体,每个区碰撞时间复杂度35*34/2=595,约等于600, 10个区综合就是6千+。(如果有跨区时间复杂度会稍微高些)

(二)假设不用优化:
350物体,都两两碰撞。时间复杂度 350*349/2=61075 ,也就是 6万+。 性能只有 优化的十分之一,或者几分之一。

如何划区,楼主自己斟酌。实践是检验真理的标准之一。最优解,还是得楼主自己探究试出来。

当然我的方案未必是最优解,四叉树的方法我也阅读了,最核心的优化点在于 “降低遍历基数”。

2赞

AOI = Area Of Interest,有很多做法,四叉树相关算法是个方向,不只有四叉树一种,四叉树有很多变体。二叉树是一维的,四叉树是二维的,八叉树是三维的。给你讲细节也讲不清楚,你肯定糊涂,这个问题的本质是——“最近邻搜索和遍历”。

2赞

该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。