怎么进行效率高的攻击范围检测?分治算法

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  著

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值