获取更多笔记和源码

公众号:CocosCreator笔记

四叉树原理本人就不赘述了,很多前辈都有详细的讲解

首先说明下四叉树并不是一个碰撞引擎,它只是一种减少碰撞候选者的算法,所以在利用四叉树得到碰撞候选元素后,还需要去检测这些候选元素与目标元素是否发生碰撞

2D中是四叉树,3D中则对应的为八叉树

项目(微信小游戏《宇宙少女》)中实测:

同屏极限情况下,可碰撞元素为:

200左右子弹+70左右怪物+若干buff+玩家

碰撞关系为:

子弹和怪物碰撞

特定怪物和其他怪物碰撞反弹

玩家和怪物碰撞

玩家和buff碰撞

使用cocos的碰撞系统,在H5表现良好,微信小游戏的Android平台也还可以,但是在ios平台上,FPS只有20+
使用四叉树做空间规划,对子弹做进一步的优化,减少碰撞元素

碰撞检测使用圆圆碰撞和圆矩碰撞,放弃了pow()sqrt()方法, 其相对于加减乘除会消耗更多的CPU(之前在QQ群讨论过)

改良后的碰撞检测在微信小游戏的Android平台性能良好,IOS平台的FPS也达到了50+

项目中使用每帧重建四叉树,当然也可以自己维护四叉树中碰撞元素的位置

1四叉树概念

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

2空间规划

游戏编程模式-空间分区

将对象存储在根据位置组织的数据结构中来高效地定位它们。  你有一组对象(可能还挺多),将对象存储在一个根据对象位置来组织的数据结构中,该数据结构可以让你高效查询位于或靠近某处的对象。当对象位置改变时,更新并继续维护该空间数据对象。用更复杂的数据结构(空间)来换取大量查询时的性能优化(时间)。

博客园中一篇讲解详细的blog

https://www.cnblogs.com/xin-lover/p/12216053.html

广告

游戏编程模式

作者:[美]Robert Nystrom(尼斯卓姆)

京东

3
quadtree-js

在GitHub上找到的一个前辈实现的四叉树:

https://github.com/timohausmann/quadtree-js

并提供了两个在线演示的demo,其中红色为四叉树节点,空白方块为四叉树中的元素,灰色方块为鼠标的位置,即目标元素,绿色方块为碰撞候选元素

1.手动添加静态对象并查看四叉树拆分:

https://timohausmann.de/quadtree.js/simple.html

2.在持续运动的对象中查看四叉树拆分:

https://timohausmann.de/quadtree.js/dynamic.html

4使用方法

1.引入quadtree.js

①通过代码引入:

import * as Quadtree from "../R-framework/quadtree.js";

②插件引入:

将quadtree.js文件导入编辑器的时候选择为插件

2.创建四叉树

区域为整个屏幕

let myTree = new Quadtree({  x: -cc.winSize.width / 2,  y: -cc.winSize.height / 2,  width: cc.winSize.width / 2,  height: cc.winSize.height / 2});

3.插入元素

参数为元素的左下角坐标及其宽高

myTree.insert({  x: 200,  y: 150,  width: 20,  height: 20});

4.检索元素

参数为目标元素的左下角坐标及其宽高

返回值为碰撞候选元素数组

let elements = myTree.retrieve({  x: 150,  y: 100,  width: 20,  height: 20});

5.碰撞检测

在得到碰撞候选元素后,需要检测是否与目标元素发生碰撞,检测的方法可以用cocos的碰撞组件,也可以根据项目需求定制碰撞检测

6.清除四叉树

检测完毕后,需要清除四叉树中的元素,以方便下次继续检测

myTree.clear();

或者维护四叉树空间中碰撞元素的位置

Cocos Creator | 碰撞检测优化-四叉树相关推荐

  1. Cocos Creator 性能优化:DrawCall

    Cocos Creator 性能优化:DrawCall(全面!) title: Cocos Creator 性能优化:DrawCall 前言 在游戏开发中,DrawCall 作为一个非常重要的性能指标 ...

  2. Cocos Creator性能优化---DrawCall

    前言 在游戏开发中,DrawCall 作为一个非常重要的性能指标,直接影响游戏的整体性能表现. 无论是 Cocos Creator.Unity.Unreal 还是其他游戏引擎,只要说到游戏性能优化,D ...

  3. Cocos Creator性能优化-2-包体优化

    对于Cocos Creator包体优化可分为 1.项目设置 1.模块设置 通过去除无需使用的模块来减少包体 (微信小游戏还支持引擎插件可在打包时勾选) 2.resources 总而言之不需要动态加载的 ...

  4. cocos creator 碰撞检测系统collider

    cocos creator 内置了简单的碰撞检测系统,会根据当前节点下添加的碰撞组件进行碰撞检测.它可以应用在很多场景,比如可以用来判断子弹是否碰撞到敌人. 碰撞组件 矩形碰撞组件: 圆形碰撞组件: ...

  5. Cocos Creator | 游戏优化之内存优化-资源管理

    更多教程请关注微信公众号: 设备对每个程序都有最大的内存分配限制,如果超过了这个阈值,会被系统强制关闭,造成 crash 因此在开发的过程中,我们要在保证程序运行效率的前提下,尽量压缩程序运行时所占用 ...

  6. Cocos creator ListView 优化

    前面文章发布了ListView代码 再实际使用,和小游戏项目优化的过程中,发现ListView初始创建Item的时候,虽然只有几个,但是如果页面打开时候,有播放动画,在比较差的机型中,还是会有出现卡顿 ...

  7. cocos creator 碰撞检测

    1.普通的碰撞检测 a.给精灵添加boxCollision b.代码里面开启碰撞管理 cc.director.getCollisionManager().enabled = true;//开启碰撞功能 ...

  8. Cocos Creator 性能优化——对象池

    ​对于游戏开发人员来说,性能优化是一个永远绕不过的话题,极致的性能是我们毕生的追求,今天就来带大家学习一下性能优化方法之一--「对象池」. 为什么要使用对象池? 在开始之前要先弄明白为什么要使用对象池 ...

  9. cocos creator 四叉树碰撞系统Demo

    先挂上demo链接,目前测试的是2000个节点的碰撞 Cocos Creator | QuadTree (myqcloud.com) 检测的节点越多,优化效果越明显. 优化的原理大致就是将屏幕划分成一 ...

  10. Cocos Creator 性能调优优化集锦

    01 为什么要做性能优化? 性能:是一种优秀的能力.唤醒快.运行持久.稳定. 这种能力在游戏上能让你的用户感觉很爽,表征表现为加载快.手机不发热.运行流畅.不卡顿. 所以,性能优化的终极目标是让你的用 ...

最新文章

  1. 使用GIF(仅限Delphi2007)
  2. Android项目:proguard混淆之常见开源项目混淆配置
  3. JSTL标签的用法详解
  4. Python3.3 学习笔记1 - 初步安装
  5. Jmeter内置函数功能(五)
  6. 有什么办法可以判断页面是静态还是动态?_网络营销——网络营销专员到底是教你如何选择网站页面制作...
  7. LeetCode每日一题 19. 删除链表的倒数第N个节点
  8. Hadoop之Hadoop基础知识面试复习
  9. java生日快乐_Java八岁生日快乐!
  10. Pytorch 神经网络nn模块
  11. Leetcode--50. Pow(x,y)
  12. 8个超棒的使用javascript开发的视觉特效网站
  13. 百度地图服务器不显示本地运行,百度地图定位成功,但地图不显示
  14. 【图像分割】基于matlab GUI图像提取【含Matlab源码 702期】
  15. Linux系统——sqlist数据库
  16. Linux下通过ODBC连接数据库及ODBC相关操作命令
  17. 分析内网即时通讯软件安全性如何
  18. element color-picker源码
  19. Vue.filter过滤器存储单位换算按B、KB 、M、 G显示字节大小
  20. wt概述-c++ web

热门文章

  1. ThinkPad SL400无线网卡的问题
  2. 关于删除某文件需要TrustedInstaller权限的解决方法
  3. IPFS为什么被学者称为数据的“黄金保险柜”?
  4. 科技粉必看的10部电影
  5. 体检管理软件#一站式体检管理系统#体检管理软件#体检软件#体检系统#体检管理系统源码
  6. python骰子游戏分析_python知识分解析掷骰子游戏
  7. java 原子量_Java多线程-新特征-原子量
  8. 广义线性模型(GLM)及其应用
  9. 想自学单片机,各位有什么书和板子值得推荐的吗?
  10. 让你的PPT更出彩的时间轴这样画!