2015-05-14 59 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會幫助你以某種方式實現你的目標。