游戏优化 之 四叉树

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://wxsr.blogbus.com/logs/60788934.html

 

四叉树 (QuadTrees)可以说是2叉树的扩展形式.

为什么在游戏中我们要用4叉树代替一般的遍历查找呢?它的优越性主要在于能在大规模对象队列中快速的查找到你想要的内容,而他的消耗却跟对象数的数目没有太直接的关系;

 

如图,你可以看到,如果在程序中通过遍历查找对象 那是相当消耗资源的,而且会随着数目的增加而呈正比例消耗;

但4叉树则不同,他通过预先建树的过程把对象整理到一个完整的树状结构中去.查询的时候只要根据要求的范围,通过遍历树节点的方法即可得到想要的数据.快速而简洁,

可能会多人会认为4叉树只适用于静态搜索,对于动态四叉树效率则要相对减慢,本人起初也是这样的想法,但经过验证发现,确实如果你每次都重新遍历树的话,那消耗绝对是要比遍历慢的,但是如果方法得当,想我上图的就是一个动态四叉树,叉用的方法是覆写x跟y的设置,在赋值时验证树状结构是否发生变化,这这样做的好处是我们只需要很小的消耗即可完成修正过程.效率上可以说没有太大改变.

下边说说4叉树的大致原理

 

 

首先我们以屏幕中心将区域等分成4等分,然后以这4个区间(红线区间)分支点把在各自区间的对象添加到对应支点的哈希表里边;

然后再分别对这4个区间各自进行4等分,重复上边的步骤,(黄线区间),然后在如此类推,一般说只要进行5-6个层级的等分足以分到 1像素大小左右了,这个过程称之为建树;

建树完毕接下来就是用树;

为什么说4叉树遍历快就在于刚才我们的建树过程已经将对象划分到各个支点中去了,剩下的我们只要根据一个搜索区域或者以及一个精确度即可通过递归的方式遍历与搜索区域相交的区间的节点即可.

比方说搜索区域只与第一区间相交,那么就意味之我们只需要遍历第一个区间的节点即可,那样我们就相当于剩下了其他3个区间对象的遍历了,这就是4叉树快的原因所在,而且他不跟对象数目直接相关,它只在乎建树时的区间等级树.

想我们做游戏场景一般都只会在5000*5000的范围内 这样的大小对于四叉树来说只要6层左右就可以完成建树过程了.但搜索的过程确实那么的快速.高效.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值