所以我只希望我的碰撞监听器发射一次。我试过输入if if variables但它并不完全优雅。
local function collideGround( self, event )
local obj = event.other
local phase = event.phase
if ( phase == "began" ) then
if obj == ground then
print("Hit")
end
elseif ( phase == "ended" ) then
end
return true
end
player.collision = collideGround
player:addEventListener( "collision", player )
答案 0 :(得分:0)
碰撞监听器不像触摸事件或点击事件。每当你的玩家对象从碰撞事件中醒来时,collideGround
将被调用,这就是为什么他们为我们提供了三个不同的event.phase
。
任何返回true的碰撞事件处理程序都将停止该碰撞事件的进一步传播,即使还有其他侦听器已收到它。这允许您进一步限制创建并传递到Lua端的事件数。虽然单个事件并不是非常昂贵,但是大量事件会影响整体性能,因此限制事件传播是一种很好的做法。
我认为Collision Detection会帮助您以某种方式实现目标。