1. 采用普通方式遍历检测,传入对象
敌人数量少的话还好,如果敌人数量多,每帧要计算那么数据,双方各10个
10对 10*10次检测遍历2*10*10个对象, 如果100对 100 *100 池遍历遍历2*100*100个对象,1000对2*1000*1000个个对象。可见计算量巨大,会影响到性能。
10对角色
1攻击,找到10个角色距离判断,10个角色同时攻击,寻找10*10个敌人角色,如果敌方也都在攻击,那么就是10*10*2个对象距离判断。
100对对象
100个同时攻击,每一个都找100个敌人,100*100,敌人也是如此,那么就是20000次。
方案. 如果有数万敌人,怎么办?因此在此基础上改进一下。
1. 使用碰撞体设置一个范围,
2. 如果进入这个范围那么就加入范围内的攻击对象
3. 最后进行遍历,检测即可
或:(比较推荐)
做一个区域检测,凡是进入这个区域那么久加入检测列表,请看一下举例
例如:有200角色100敌人 100队友。未优化时:100*100*2=20000
具体方法:
1. 200个敌人分成4个区域,每个区域放置25个敌人和25个另一批队友。
2. 区域判断: 敌人检测每个敌人进行和区域中心距离判断,来决定是否某个区域内。
3. 区域内有两类角色的距离判断,25个敌人每人检测25个队友+1个区域位置 就是25*25,两外25个队友检测25个敌人就是25*25,两者相加就是25*25+25*25,4个区域就是(25*25+25*25)*4=2500+2500=5000,然后每一名角色都要进行一次距离判断。就是再加200。得出5200次;
优化后:5200次距离计算判断,
未优化:20000次距离判断,
当然也会有另外一种情况,当双方全部集中再一个区内,那么就可以设置一个设置另外一个距离判断,如果在这个范围内超出所能容纳的最大数量,可以再次进行区域分割。按照数量来分割。如果再超越那么再次分割。
希望能对你们有帮助。
T2 著