Lua 矩形碰撞系统在love2d中不工作

Lua 矩形碰撞系统在love2d中不工作,lua,collision-detection,love2d,Lua,Collision Detection,Love2d,我试图在Love2d框架中创建一个简单游戏中管理对象和碰撞的基本架构。所有对象都存储在一个表中(objects:activeObjects),然后objects:calculateCollisions()函数中的一个循环遍历所有对象。在每次迭代中,另一个嵌套循环检查该对象是否与同一表中的任何其他对象重叠。在对象:calculateCollisions()的末尾,理想情况下,每个对象都有一个表,其中包含它在当前时间点与之重叠的所有对象的引用。但是,对象总是有空的碰撞表。现在有两个测试对象:一个随鼠

我试图在Love2d框架中创建一个简单游戏中管理对象和碰撞的基本架构。所有对象都存储在一个表中(
objects:activeObjects
),然后
objects:calculateCollisions()
函数中的一个循环遍历所有对象。在每次迭代中,另一个嵌套循环检查该对象是否与同一表中的任何其他对象重叠。在
对象:calculateCollisions()
的末尾,理想情况下,每个对象都有一个表,其中包含它在当前时间点与之重叠的所有对象的引用。但是,对象总是有空的碰撞表。

现在有两个测试对象:一个随鼠标移动,另一个始终保持在右上角。对于用户来说,当这两个对象重叠时,它们应该同时消失,但是正如前面提到的,
碰撞对象
表总是空的。

我有三个源文件:
main.lua


objects.lua
(大部分重要内容都是在哪里写的,问题可能在哪里):

customObjects.lua
(其中定义了两个测试对象的构造函数):

抱歉,我不能发布超过两个超链接

编辑:经过更多的调试,我已经将问题缩小到
collizeswith(obj)
函数。它似乎总是返回false。
下面是代码:

function result:collidesWith(obj)
    if self.bottom < obj.top then return false end
    if self.top > obj.bottom then return false end
    if self.right < obj.left then return false end
    if self.left > obj.right then return false end
    return true
end
功能结果:碰撞开关(obj)
如果self.bottomobj.bottom,则返回false end
如果self.rightobj.right,则返回false end
返回真值
结束

使用几个不同的测试输入,在纸上检查并跟踪逻辑。你很快就会发现你的逻辑是荒谬的。你错过了一半的测试,有些比较是“指向错误的方向”,等等。因此:

function result:collidesWith(obj)
    if self.bottom <= obj.top and self.bottom >= obj.bottom then return true end
    if self.top >= obj.bottom and self.top <= obj.top then return  true end
    if self.right >= obj.left and self.right <= obj.right then return false end
    if self.left <= obj.right and self.left >= obj.left then return false end
    return false
end
功能结果:碰撞开关(obj)
如果self.bottom=obj.bottom,则返回true end

如果self.top>=obj.bottom和self.top=obj.left和self.right,您确定这些属性有效吗?(两个对象的底部、顶部、右侧和左侧)我也没有在任何对象移动时更新其中的左、右等变量。现在都修好了。
function result:collidesWith(obj)
    if self.bottom <= obj.top and self.bottom >= obj.bottom then return true end
    if self.top >= obj.bottom and self.top <= obj.top then return  true end
    if self.right >= obj.left and self.right <= obj.right then return false end
    if self.left <= obj.right and self.left >= obj.left then return false end
    return false
end