在Corona SDK上检测动态物体停止与感应器重叠

我正在制作一个主要基于动态物理体的游戏,现在需要在该元素与传感器物体(箭头)重叠时施加力。

我知道当箭头与物体碰撞开始时,我可以开始施加力,但如何检测何时停止施加力呢?

是否有一种方法可以知道动态物体何时超出传感器物体的范围?

点赞
用户736007
用户736007

好了,在尝试了许多次之后,我甚至思考了分离轴定理,但我找到了一种更简单的方法(因为 SAT 太慢了):

element:addEventListener( "collision", function(event)
    if (event.other.id=="ball") then
        if (event.phase=="began") then
            element.collision_counter=element.collision_counter+1
        elseif (event.phase=="ended") then
            element.collision_counter=element.collision_counter-1
        end
    end
end)

所以,从我的理解来看,似乎每次验证 Body 上的 Shape 是否发生碰撞时,event.phase=="began" 都会被调用,而当物体不再与该相同的 Shape 碰撞时,event.phase=="ended" 会被调用。现在,使这段代码良好工作的“秘密”是如果物体仍处于与另一个 Shape 发生碰撞但与相同的 Body 上,则会首先调用 event.phase=="began" 以针对新的 Shape,只有在此之后才会调用 event.phase=="ended"

此后,由于我希望在我的 element(在我的情况下是箭头)内时影响我的对象的速度,我只需在我的场景中使用以下代码注册监听器 Runtime:addEventListener( "enterFrame", scene )

function scene:enterFrame()
    if (element.collision_counter>0) then
        local rad=math.rad(element.rotation)
        other_object:applyForce( 15, 0, other_object.x, other_object.y )
    end
end
2015-04-07 21:36:51