我正在制作一个主要基于动态物理体的游戏,现在我需要在该元素与传感器主体的其他项目(箭头)重叠时对该元素施加力。
我知道我可以在箭头开始发生相位碰撞事件时立即开始施力,但是,我怎样才能检测何时停止施加此力?
有没有办法知道动态对象何时超出传感器主体的范围?
答案 0 :(得分:1)
好的,经过多次尝试,甚至在考虑分离轴定理后,我更容易做到这一点(因为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)
因此,根据我的理解,每次验证event.phase=="began"
Shape
上的Body
时发生event.phase=="ended"
时,似乎会调用Shape
对象不再与同一个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
代码如下:
{{1}}