检测动态物体何时停止与 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)
因此,据我了解,似乎每次验证 Body
的 Shape
上的碰撞时都会调用 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
我正在制作一个主要基于动态物理体的游戏,现在我需要在该元素与另一个项目(箭头)(传感器体)重叠时对该元素施加力。
我知道我可以在箭头上发生相位碰撞事件后立即开始施加力,但是,我如何检测何时停止施加此力?
有没有办法知道动态对象何时超出传感器主体的范围?
好吧,经过多次尝试,甚至在考虑了分离轴定理之后,我用一种更简单的方法做了这个(因为 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"
,并且 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