类似蛋壳特工队这样的游戏,屏幕上会有很多经验点,英雄走进经验点会吸收过来,如何高效的计算哪些经验点是可以吸收的哪些不行,如果所有的点都存到一个数组里,for循环遍历的话,那实在是太耗时间了
你是不是有什么编程基础的误解,性能好不好不是看你for不for,而是看for里面做了啥。
最高性能的做法就是for里面计算一下距离不就行了,没什么比纯数学运算更高效的了。
1赞
把地图分成网格状的,比如256X256
把经验点当成碰撞体存入地图块,经验点只和当前块的碰撞体进行碰撞检查,
一般情况下,一块不超过10个碰撞体,这种做法比四叉树的效率还要高很多,
你这还是处理的静态障碍物,基本上忽略不计。
这就是内存换效率,你这点内存也可以忽略不计。
我当时测试的时候是90万X90万像素的,内存占1个G。
基本上满足市面上大部分游戏了。
2赞
角色和当前块的碰撞体就行碰撞检查
你需要四叉树
估计需要检测当前块以及周围相邻块吧 
如果那些点一直在移动,估计无法使用四叉树了
将地图平均划分多块区域,经验点生成时,通过坐标计算出区域,并放到对应的区域的Set中,人物移动时计算可拾取范围占用的区域,再遍历选出的区域的Set,计算和经验点的距离。满足时,将点从Set中删掉。
1.计算距离时不用开根号。
2.同时可以通过跳帧减少遍历。
2赞
一般以人物脚底为中心,不需要检查邻格,除非以人物整个大小为碰撞区,那就是矩形与矩形碰撞了,是需要和好几块区域进行检查的。
搜下aoi算法