gpt4 book ai didi

lua - Corona/Box2D 检测与非移动静态物体的碰撞

转载 作者:行者123 更新时间:2023-12-04 11:27:08 26 4
gpt4 key购买 nike

出于发布原因,这里是我正在尝试做的一个简单版本。

在屏幕上,我有一个简单的圆形对象,它是静态的,不会移动。然后用户可以拖放一条直线。如果这条线穿过那个圆圈,我希望触发碰撞事件。

似乎除非其中一个物体在移动,否则永远不会检测到碰撞。画线的时候能检测到碰撞吗?

碰撞事件

function onHit(e)
print("hit");
end
Runtime:addEventListener("collision", onHit)

触摸事件

local startX = 0;
local startY = 0;
local endX = 0;
local endY = 0;

function onTouch(e)
if(e.phase == "began") then
startX = e.x
startY = e.y
elseif(e.phase == "moved") then
endX = e.x
endY = e.y
elseif(e.phase == "ended") then
local line = display.newLine(startX, startY, endX, endY)
line:setColor(100, 100, 100)
line.width = 2
physics.addBody(line, "static", { })
end
end
Runtime:addEventListener("touch", onTouch)

创建圈子

local c = display.newCircle(50, 50, 24)
physics.addBody(c, "static", { radius = 24 })

最佳答案

本页来自Corona SDK docs描述页面中间的 bodyType 属性。在描述“静态”物体时,它说(我强调):

static bodies don't move, and don't interact with each other; examples of static objects would include the ground, or the walls of a pinball machine.

这意味着其中一个对象必须是 static 以外的对象。

这是一个想法,尽管我自己还没有尝试过:(请参阅下面的更新。)在您第一次创建行时将其设置为dynamic。几毫秒后使用 timer.performWithDelay 函数将其设置为 static。如果在此期间发生碰撞事件,您将知道您有重叠,并且可以立即将 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%,但在绘制一条从圆圈外开始并在圆圈内结束的线时偶尔会失败,这应该是重叠的,但有时会报告为没有重叠。我无法弄清楚为什么会这样。无论如何,我都会发布这个,希望它能让你继续前进,同时也认为有人可能能够找出不一致的行为并教育我们俩。

如果做不到这一点,您可以为“无重叠”情况添加额外的检查,以检查直线的任一端点距离圆心的距离是否小于圆的半径。这将使事情正常进行,但我想它没有捕获让物理引擎工作的全部意义。

无论如何,祝你好运!

关于lua - Corona/Box2D 检测与非移动静态物体的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7697555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com