mysql 四叉树的应用_游戏中的四叉树

一 游戏中的碰撞

想象一下在一个2D游戏中,有N个物体需要互相碰撞,在不进行算法优化的情况下,每帧的计算应该是N^2的复杂度,这个性能消耗很严重。所以需要四叉树这个数据结构来减少计算力。

二 啥是四叉树四叉树(quad-tree)是一种数据结构,是一种每个节点最多有四个子树的数据结构。四叉树是在二维图片中定位像素的唯一适合的算法。因为二维空间(图经常被描述的方式)中,平面像素可以重复的被分为四部分,树的深度由图片、计算机内存和图形的复杂度决定。四叉树可以用来在数据库中放置和定位文件(称作记录或键)。这一算法通过不停的把要查找的记录分成4部分来进行匹配查找直到仅剩下一条记录为止。

来源碰撞检测优化-四叉树​forum.cocos.org

上面的比较全面的解释,我就结合自己理解 ,用大白话来解释一下

1.从树这个数据结构来说,就是把游戏中碰撞体都挂在树这个结构上,通过剪枝的方式来减少需要判断量。图片来源 http://davidhsu666.com/archives/quadtree_in_2d/

假如上面的所有的树节点都是可能碰撞的物品,利用剪枝,就只需要检测 【1.1.1.2】这四个物品了。

2.从查找的来想,在一维 的世界里面可以用二分查找,把一堆数据分一半,再分一半直到找这个东西,在二维的世界,我们就用‘四分查找‘,把屏幕化为四份,在里面找,找不到,我再分为四分,同样在3维世界,我们就用‘八分查找’

这里有两个非常好用的网址可以直观看效果quadtree-js Simple Demo​timohausmann.dequadtree-js Dynamic Demo​timohausmann.de

插入流程我觉这篇解释的很清楚,我就直接拉了过来http://davidhsu666.com/archives/quadtree_in_2d/​davidhsu666.com

三,npm中四叉树

我们当然可以自己实现四叉树这样的数据结构,在cocos的论坛里面有相应的介绍使用四叉树优化碰撞检测​forum.cocos.org85022fe322903fab1e5ab64f9a70042f.png

在npm里面已经有了帮我们实现的好轮子,quadtree-js​github.com

这个库没有帮你进行碰撞计算,但是他会帮你把游戏的中所以需要碰撞物体在四叉树中分好位置js-quadtree​www.npmjs.com13ddb233d546352d527b3da58a5b4b4d.png

这个库帮你计算好碰撞,还可以用与检测点是否在区域内

总结

四叉树是用来降低碰撞检测复杂度的,但是屏幕中需要碰撞物品数量比较少的话,就不需要用四叉树了。

碰撞也有其他的优化算法,下一章将会讲解提前帧的概念

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值