2015-03-07 1 views
0

Я работаю над игрой, которая включает в себя линии рисования, которые направляют физический шар в ведро внизу экрана. Однако иногда пользователь может плохо рисовать линии, и шары застрянут. Чтобы избавиться от этого, я хотел бы проверить положение мячей каждые 3 секунды.Как постоянно проверять местоположение объекта в lua

Это то, что я думал, будет работать:

function checkBallVelocity(event) 
    startX = event.x 
    startY = event.y 

    timer.performWithDelay(5000, function() 

     endX = event.x 
     endY = event.y 

     print(startX..","..startY.." || "..endX..","..endY) 
     if startX == endX or startY == endY then 

      if event.other.name == "1" then 

       circle1:removeSelf() 
       circle1 = nil 

       ballsMissed = ballsMissed + 1 
      elseif event.other.name == "2" then 

       circle2:removeSelf() 
       circle2 = nil 

       ballsMissed = ballsMissed + 1 
      elseif event.other.name == "3" then 

       circle3:removeSelf() 
       circle3 = nil 

       ballsMissed = ballsMissed + 1 
      end 
      return 1 
     else 
      checkBallVelocity() 
     end 
    end 
    ) 
end 

К сожалению, это не так. Любая помощь/совет приветствуются.

+0

'event' недоступен для анонимной функции. – hjpotter92

+0

@ hjpotter92 Можете ли вы, пожалуйста, уточнить, что я должен сделать, чтобы исправить это? Я думал, что понял, что вы имели в виду, но это не сработало. –

ответ

0

Существует много способов сделать такие вещи, но Corona предоставляет событие enterFrame, которое срабатывает каждый раз при рисовании кадра (30 или 60 кадров в секунду). Он может использоваться как основной цикл для выполнения периодических действий, но имейте в виду, что он довольно часто выполняется довольно, поэтому он помогает определить период и ограничить ваши действия на определенные этапы в течение периода.

local period 
local phase = 0 
function mainLoop(event) 
    phase = phase + 1 
    if phase == 1 then 
     checkBallPosition(...) 
    elseif phase == period 
     phase = 0 
    end 
end 
... 
function scene:enterScene(event) 
    period = display.fps * 3 -- # of seconds 
    Runtime:addEventListener("enterFrame", mainLoop) 
    ... 
end