绘制的线与物体的碰撞(Corona SDK)

例如我有一条可以用手指画的线和一个矩形。我希望当线和矩形碰撞时,线停止画。我该怎么做?

例如我的线函数:

local line = function()
if(e.phase == "began") then
-- 用于线的代码
elseif(e.phase == "moved") then
-- 用于线条绘制的代码
elseif(e.phase == "ended") then
-- 用于线条停止绘制的代码
end

我猜我可以像这样使用collision smith来做到这一点:

local function onCollision( event )
        if ( event.phase == "began" ) then

                if event.object1.myName == "top" and event.object2.myName == "line" then
                        line("ended")

                end

        end
end

    Runtime:addEventListener("collision", onCollision);

但它不起作用...有什么建议吗?

原文链接 https://stackoverflow.com/questions/10283740

点赞
stackoverflow用户932927
stackoverflow用户932927

我需要看到更多你的代码,特别是你创建直线(或者直线组,如果你频繁创建和销毁),才能给你想要的答案。然而,如果我在做这个问题,我会在每个手指移动时重新绘制直线(不添加物理实体),并根据手指位置手动检测与矩形的交点。也就是下面这个样子:

local line = function()
    ...
    elseif(e.phase == "moved") then
        local cb = rect.contentBounds
        if event.x > cb.xMin and event.x < cb.xMax and event.y > cb.yMin and event.y < cb.yMax) then
            line("ended")
        end
    else
    ....
end

碰撞的问题在于如果你不断创建和销毁直线,如果它们偶然相交,你可能由于他们的短生命周期(以及它们实际上并没有移动)而无法获得事件。如果你真的想使用碰撞,我建议在接触开始时创建一个透明的代理对象(一个圆),并在接触移动时从起始点向其绘制一条直线。然后我会使用触摸连接在代理对象上,并检测那里的碰撞。这可能不值得一番麻烦。

2012-08-10 00:21:22