我正在尝试在 Love2d 框架中的一个简单游戏中创建用于管理对象和碰撞的基本架构。所有对象都存储在一个表 ( objects:activeObjects
) 中,然后objects:calculateCollisions()
函数中的循环遍历所有对象。在每次迭代中,另一个嵌套循环会检查该对象是否与同一表中的任何其他对象重叠。在 结束时objects:calculateCollisions()
,理想情况下,每个对象都有一个表,其中包含对在当前时间点与其重叠的所有对象的引用。但是,对象总是有空的碰撞表。
现在有两个测试对象:一个随鼠标移动,一个始终停留在右上角。对用户而言,这两个对象在重叠时应该同时消失,但是,如前所述,collidingObjects
表格始终是空的。
我有三个源文件:: http
main.lua
:
//pastebin.com/xuGBSv2j
objects.lua
(大部分重要的东西都写在这里,可能问题出在哪里): http:
//pastebin.com/sahB6GF6
customObjects.lua
(两者的构造函数在哪里定义了测试对象):
function objects:newCollidingObject(x, y)
local result = self:newActiveObject(x, y, 50, 50)
result.id = "collidingObject"
function result:collide(other)
if other.id == "collidingObject" then self.remove = true end
end
return result
end
function objects:newMovingObject(x, y)
local result = self:newCollidingObject(x, y)
function result:act()
self.x = love.mouse.getX()
self.y = love.mouse.getY()
end
return result
end
抱歉,我不能发布两个以上的超链接。
编辑:经过更多调试,我已将问题缩小到collidesWith(obj)
函数。它似乎总是返回假。
这是代码:
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