【问题标题】:How can I correctly pause a game involving physics and transitions?如何正确暂停涉及物理和过渡的游戏?
【发布时间】:2011-07-28 06:53:59
【问题描述】:

我想在我的游戏中加入一个暂停按钮,该按钮涉及对象的物理特性和一些过渡。我怎么能在我相当新的 Corona SDK 中做到这一点? 有什么指导吗??

【问题讨论】:

    标签: lua coronasdk game-physics


    【解决方案1】:
    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)
    

    将在点击时切换物理暂停

    【讨论】:

      【解决方案2】:

      除了停止物理之外,如果您有随场景移动的对象以及游戏中的任何动画,您还必须移除 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
      

      【讨论】:

        【解决方案3】:

        使用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) --dont save to album
            gameScene:insert(screenCap)
        
            --insert pause buttons and etc here
        end
        
        Runtime:addEventListener("touch",onPause)
        

        【讨论】:

          【解决方案4】:

          使用暂停键设置功能:

          local function pausebtn(event)
          
          if event.phase == "ended" then
                physics.pause()
          
             end
          pausebtn:addEventListener("touch", pausebtn)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-04-18
            • 2016-01-09
            • 1970-01-01
            • 1970-01-01
            • 2014-11-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多