检测动态物体何时停止与 Corona SDK 上的传感器重叠

Detect when a dynamic body stops overlapping a sensor on Corona SDK

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

我知道我可以在箭头上发生相位碰撞事件后立即开始施加力,但是,我如何检测何时停止施加此力?

有没有办法知道动态对象何时超出传感器主体的范围?

好吧,经过多次尝试,甚至在考虑了分离轴定理之后,我用一种更简单的方法做了这个(因为 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)

因此,据我了解,似乎每次验证 BodyShape 上的碰撞时都会调用 event.phase=="began",并且 event.phase=="ended" 是当对象不再与相同的 Shape 发生碰撞时调用。现在,使此代码运行良好的 "secret" 是这样一个事实,即如果对象仍在 Body 上但与另一个 Shape 发生碰撞,则首先调用 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