快速在数组中查找对象
2020-3-5 16:52:32
收藏:0
阅读:147
评论:1
对于一个碰撞检测游戏,我在考虑将环境中的对象分成不同的块,以减少需要检查的对象数量,只检查同一(和相邻的)块中的对象。然而,我的一些对象(子弹)将快速通过不同的块,因此我需要快速将这些对象从一个数组移动到另一个数组中。
我考虑使用字典而不是数组,因此可以使用唯一的键作为索引快速查找子弹并将其移动,但是我决定看看这里是否有更好的方法?
我计划在游戏中有几千个对象(包括子弹),对象本身将只是圆形和矩形,子弹将被表示为线段。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我认为你所说的“块”是指游戏世界中彼此独立、可减少开销的不同区域。如果我错了,请纠正我。
至于“块”之间子弹轨迹的问题,我建议记录子弹的起点——也就是发射子弹的地点——和子弹与物体碰撞的地点。这可以通过一些依赖于你的游戏世界坐标系的碰撞检测来实现,无论这个坐标系是什么样子。我建议创建一个
Bullet类。这是一个快速的概念证明,可以作为模块使用require加载:local Bullet = {__type = "Bullet"} -- 这个函数可以将子弹信息作为参数,比如它的起点和口径。 function Bullet.new(start_pos_in, calibre_in) -- 在这个表中记录起点和终点位置,可能用一些(x,y)坐标对来表示,假设你的游戏是2D的。我只是用了一个名为“Point”的通用占位符。 local self = { calibre = calibre_in, start_pos = start_pos_in, end_pos = Point.new(0, 0) } local mt = { __metatable = "metatable", __newindex = function(t, k, v) local e = string.format("type Bullet has no member '%s'", k) return error(e, 2) end, __index = self } return setmetatable(self, mt) end return Bullet使用我上面的例子,可以这样实例化一个
Bullet对象:-- 以.50口径为例。'x'和'y'表示子弹在游戏世界中的起点。 local bullet = Bullet.new(Point.new(x, y), ".50")一旦
Bullet对象与游戏世界中的某个物体碰撞,您可以使用内部变量end_pos记录其碰撞点,计算其行程等。根据您的“块”系统如何工作,您可以记录子弹的“块”起点。作为一个副注,我建议尝试实现对象池,以节省开销的子弹粒子。 (如果您有兴趣,请参阅此文章进行参考。)