我如何正确暂停涉及物理和过渡的游戏?

我想在我的游戏中添加一个暂停按钮,其中包含物体上的物理和一些转换。作为一个相对较新的 Corona SDK 用户,我该怎么做呢?有什么指引??

原文链接 https://stackoverflow.com/questions/6855094

点赞
stackoverflow用户88888888
stackoverflow用户88888888

// 暂停函数
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)

此代码可以在每次点击时切换物理暂停状态。

2011-08-30 14:32:53
stackoverflow用户909233
stackoverflow用户909233

使用 physics.pause() 会在物理对象中有轻微的抖动。

另一种方法是在暂停时捕捉屏幕并将其放在场景上方。

之后,在屏幕上方添加暂停时的GUI对象。

在恢复时,删除暂停时的对象和屏幕捕捉。

local gameScene= display.newGroup()

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

function onPause(event)
    local screenCap = display.captureScreen(false) --不保存到相册
    gameScene:insert(screenCap)

    --插入暂停按钮等
end

Runtime:addEventListener("touch",onPause)
2012-01-16 08:54:35
stackoverflow用户1213470
stackoverflow用户1213470

使用暂停按钮设置功能:

local function pausebtn(event)

如果 event.phase == "ended" 则

      physics.pause() 

   end

pausebtn:addEventListener("touch", pausebtn)
2012-05-02 14:47:13
stackoverflow用户4625322
stackoverflow用户4625322

除了停止物理引擎,如果你有场景中移动的对象和游戏中的任何动画,还必须移除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
2015-03-02 22:00:08