2015-05-14 4 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 поможет вам как-то достичь своей цели.

Смежные вопросы