此页面来自Corona SDK 文档 http://developer.anscamobile.com/content/game-edition-physics-bodies#physics.addBody描述了bodyType
属性大约在页面的中间位置。当描述“静态”物体时,它说(我的重点):
静态物体不移动,并且不互相交流;
静态物体的例子包括地面或墙壁
弹球机。
这意味着其中一个对象必须是除static
.
这是一个想法,虽然我自己没有尝试过:(参见update如下。)划线dynamic
当你第一次创建它时。将其设置为static
几毫秒后使用timer.performWithDelay
功能。如果同时发生碰撞事件,您就会知道发生了重叠,并且可以设置bodyType
回到static
立即地。如果没有收到碰撞事件,bodyType
仍将是dynamic
在延迟的例程中,你会知道你没有重叠。在这种情况下,您仍然需要将该行设置为static
在延迟的例程中。
更新:使用您的代码作为起点对此进行了测试
我更改了碰撞事件以始终设置两个对象'bodyType
静态:
function onHit(e)
print("hit")
e.object1.bodyType = "static"
e.object2.bodyType = "static"
end
然后我改变了addBody
调用该行将其添加为dynamic
正文,使用新代码来设置timer.PerformWithDelay
短时间后检查的函数:
physics.addBody(line, "dynamic", { })
timer.performWithDelay(10,
function()
if line.bodyType == "dynamic" then
print ("NO OVERLAP")
line.bodyType = "static"
end
end)
不幸的是,结果好坏参半。它在大多数情况下都有效,也许是 95%,但在绘制一条从圆外开始并在圆内结束的线时偶尔会失败,这应该是重叠,但有时会报告为没有重叠。我无法弄清楚为什么会发生这种情况。不管怎样,我发布这篇文章,希望它能让你继续前进,同时也认为有人可能能够找出不一致的行为并教育我们俩。
如果失败,您可以为“无重叠”情况添加额外的检查,以检查线的任一端点是否比距中心的圆的半径更近。这将使事情正常进行,但我认为它忽略了让物理引擎正常工作的全部意义。
无论如何,祝你好运!