lua eventListener вызывает метод четыре раза, а не один раз - PullRequest
1 голос
/ 15 марта 2019

В моей игре (с использованием Corona SDK) я хочу вызывать врага каждые 3 секунды. Мой spawnBlob создает только 1 шарик за раз, но четыре появляются на экране раз в 3 секунды. Я новичок в Lua и Corona, и мне трудно отследить этот код и выяснить, как вещи вызываются четыре раза, когда их не должно быть. У меня также есть эта проблема с обнаружением столкновений, где я печатаю позицию, где сталкиваются два объекта. Однако, когда два объекта сталкиваются, печатаются 4 строки оператора print, и я не знаю, что происходит.

Существует ли event.phase для этого таймера, который я должен использовать аналогично началу для событий касания?

local allBlobs = {} -- global variable

function spawnBlob( event )
    allBlobs[#allBlobs + 1] = display.newSprite ( mainGroup, mySheet3, 
    sequenceDataBlob)
    local blob = allBlobs[#allBlobs]
    physics.addBody( blob, { density=0.3, friction=0.6 })
    blob.x = math.random(0, display.contentWidth)
    blob.y = -80
    blob.myName = "blob" .. #allBlobs
    physics.addBody(blob, "dynamic", {density=0.1, bounce=0, friction=.2, 
    radius=128})
    blob:play()

end

--scene:create( event ) contains mainGroup, spriteSheets and buttons

timer.performWithDelay( 3000, spawnBlob, 0) --in scene:show(event) 

--scene:hide (event ) is empty
--scene:destroy ( event ) is empty

scene:addEventListener("create", scene)
scene:addEventListener("show", scene)
scene:addEventListener("hide", scene)
scene:addEventListener("destroy", scene)

return scene

1 Ответ

1 голос
/ 18 марта 2019

В сцене: функция шоу, которую вы можете использовать

local phase = event.phase

if (phase == "will") then
   --call your listeners
elseif (phase == "did") then
end
...