2015-05-14 29 views
0

所以我只想让我的碰撞侦听器发射一次。我已经试过如果执行变量,但它不完全优雅。停止多次发射电晕碰撞事件

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

您能否更新您的问题以表明您的问题?这段代码是否可以工作,并且你正试图让它更优雅?代码没有以某种方式工作? – josliber

+0

它确实有效,但我想让碰撞侦听器只触发一次,它目前正在多次触发 – Alurus

回答

0

碰撞监听器不像触摸事件或敲击事件。每当你的玩家对象从碰撞事件中醒来,collideGround将被调用,这就是为什么他们提供了三个不同的event.phase

任何返回true的碰撞事件处理程序都会停止该碰撞事件的进一步传播,即使还有其他听众会接收到它。这使您可以进一步限制创建并传递给Lua端的事件数量。虽然单个事件不是非常昂贵,但其中大量事件会影响整体性能,因此限制事件传播是一种很好的做法。

我认为Collision Detection会帮助你以某种方式实现你的目标。