Как мне правильно приостановить игру, включающую физику и переходы?

Я хочу включить в свою игру кнопку паузы, которая включает в себя физику объектов и некоторые переходы. Как я могу сделать это в Corona SDK, в котором я новичок? Любое руководство??


person sheraz amin    schedule 28.07.2011    source источник


Ответы (4)


function pause()

physics.pause()
end

Runtime:addEventListener("touch", pause)

приостановит всю физику.

function pause(event)
    if event.phase == "began" then
        if paused == false then
             physics.pause()
             paused = true
        elseif paused == true then
             physics.start()
             paused = false
        end
   end
end

paused = false
Runtime:addEventListener("touch", pause)

будет переключать физику на паузу при нажатии

person Community    schedule 30.08.2011

Помимо остановки физики, вы также должны удалить прослушиватели enterframe, если у вас есть объекты, которые движутся вместе со сценой, и любую анимацию, которая есть в игре.

Таким образом, ваша функция паузы будет такой

function Pause(event)
 if event.phase == "began" then
    if paused == false then

      physics.pause()
      paused = true

      Runtime:removeEventListener("enterFrame",Contador_func)
      Runtime:removeEventListener("enterFrame",Move_c1ScrollPai)
      Runtime:removeEventListener("enterFrame",Move_c1ScrollFilho)
      Runtime:removeEventListener("enterFrame",VelAumenta)
      Runtime:removeEventListener("enterFrame",Serra)  
      Runtime:removeEventListener("enterFrame",passaro)
      Runtime:removeEventListener("enterFrame",bf)
      Runtime:removeEventListener("enterFrame",bf2) 
      Runtime:removeEventListener("enterFrame",p)        
      Runtime:removeEventListener("enterFrame",CR)        
      Runtime:removeEventListener("enterFrame",Funcao)
      Runtime:removeEventListener("enterFrame",BumPassaro)
      Runtime:removeEventListener("collision",Andar)

      p:pause()
      Bum:pause()
      coin:pause()
      coins:pause()

    elseif paused == true then

      Runtime:addEventListener("enterFrame",Contador_func)
      Runtime:addEventListener("enterFrame",Move_c1ScrollPai)
      Runtime:addEventListener("enterFrame",Move_c1ScrollFilho)
      Runtime:addEventListener("enterFrame",VelAumenta)
      Runtime:addEventListener("enterFrame",Serra)  
      Runtime:addEventListener("enterFrame",passaro)
      Runtime:addEventListener("enterFrame",bf)
      Runtime:addEventListener("enterFrame",bf2) 
      Runtime:addEventListener("enterFrame",p)        
      Runtime:addEventListener("enterFrame",CR)        
      Runtime:addEventListener("enterFrame",Funcao)
      Runtime:addEventListener("enterFrame",BumPassaro)
      Runtime:addEventListener("collision",Andar)
      Runtime:removeEventListener("enterFrame",p)

      p:play()
      Bum:play()
      coin:play()
      coins:play()

      physics.start()
      paused = false

    end
 end
 end
person Talles Rodrigues    schedule 02.03.2015

При использовании physics.pause() в физическом объекте будет небольшое дрожание.

Другой способ — сделать снимок экрана во время паузы и поместить его поверх сцены.

После этого вы помещаете поверх экрана приостановленные объекты графического интерфейса экрана.

Удалите приостановленные объекты экрана и снимок экрана при возобновлении.

local gameScene= display.newGroup()

local myObject1 = display.newRect(50,50,100,150 )
gameScene:insert(myObject1)

function onPause(event)
    local screenCap = display.captureScreen(false) --dont save to album
    gameScene:insert(screenCap)

    --insert pause buttons and etc here
end

Runtime:addEventListener("touch",onPause)
person cctan    schedule 16.01.2012

Используйте кнопку паузы, чтобы установить функцию:

local function pausebtn(event)

if event.phase == "ended" then
      physics.pause()

   end
pausebtn:addEventListener("touch", pausebtn)
person Malarkodi    schedule 02.05.2012