【问题标题】:Reloading screen in corona在电晕中重新加载屏幕
【发布时间】:2011-11-01 05:22:07
【问题描述】:

我正在电晕中开发一个应用程序,我需要一次又一次地重新加载同一个屏幕。我不知道该怎么做,谁能用代码解释一下

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    1) director class

    2) main.lua

    display.setStatusBar (display.HiddenStatusBar)
    --> Hides the status bar
    
    local director = require ("director")
    --> Imports director
    
    local mainGroup = display.newGroup()
    --> Creates a main group
    
    local function main()
    --> Adds main function
    
        mainGroup:insert(director.directorView)
        --> Adds the group from director
    
        director:changeScene("myscene")
        --> Change the scene, no effects
    
        return true
    end
    
    main()
    

    3) myscene.lua

    module(..., package.seeall)
    
    function new()
        local localGroup = display.newGroup()
    
        local redbutton = display.newImage ("redbutton.png")
        redbutton.x = 160
        redbutton.y = 100
        localGroup:insert(redbutton)
    
        local function pressRed (event)
            if event.phase == "ended" then
                director:changeScene ("reloader")
            end
        end
    
        redbutton:addEventListener ("touch", pressRed)
    
        return localGroup
    end
    

    4) reloader.lua

    module(..., package.seeall)
    
    function new()
        local localGroup = display.newGroup()
    
            local function listener( event )
                director:changeScene ("myscene", "fade")
            end
    
            timer.performWithDelay(50, listener )
    
            return localGroup
    end
    

    【讨论】:

      【解决方案2】:

      Storyboard API 自 build 2011.678 起可用

      这是一个使用构建 2011.704 的情节提要 API 的示例

      每次触摸都会重新加载整个场景

      --main.lua
      module(...,package.seeall)
      local storyboard=require("storyboard")
      local scene=storyboard.newScene()
      scene.name="scnMenu"
      
      function scene:createScene(event)
          local group=self.view
          bg=display.newRect(0,0,100,100)
          group:insert(bg)
      end
      
      
      function scene:enterScene(event)
          Runtime:addEventListener("touch",onTouch) 
      end
      
      function onTouch(event)
          storyboard.gotoScene("main","fade",1000)
      end
      
      function scene:exitScene(event)
          Runtime:removeEventListener("touch",onTouch)
      end
      
      function scene:destroyScene(event)
      end
      
      scene:addEventListener("createScene",scene)
      scene:addEventListener("enterScene",scene)
      scene:addEventListener("exitScene",scene)
      scene:addEventListener("destroyScene",scene)
      
      return scene
      

      【讨论】:

        【解决方案3】:

        我不太清楚,但我的游戏使用相同的 lua 文件进行 changeScene。

        myscene.lua

        导演:changeScene("myscene")

        【讨论】:

          【解决方案4】:

          我尝试了另一种对我有用的方法,示例如下 -

          第 1 步 - 创建一个对象,例如 - 本地 reloadScene

          第 2 步 - 应用第 2 步,当需要重新加载场景时 - reloadScene = "是" storyboard.reloadScene("eventsButtonClicked")

          第 3 步- 应用第 3 步,当不需要重新加载场景时- 函数scene2a:exitScene(事件) 如果 reloadScene == "YES" 那么 storyboard.purgeScene("eventsButtonClicked") reloadScene =“否” 结尾 结尾 场景2a:addEventListener("exitScene", 场景2a)

          【讨论】:

            【解决方案5】:

            我认为您应该必须遵循以下步骤:我已经实施了这些步骤以重新加载/重新启动 corona 中的情节提要场景。

            第 1 步:创建一个函数或代码行,以从您要重新加载或重新启动的情节提要类中一次又一次地重新启动/重新加载相同的场景。

            function forRestart(event)
            
            if(event.phase == "ended") then
            
               local current_scene_name = storyboard.getCurrentSceneName()
               **storyboard.gotoScene( "reload", "fade", 250 )**
            
            return true;
            end
            

            第 2 步:创建一个名为 reload 的 lua 文件。下面是 reload.lua 文件的模板。

            local storyboard = require( "storyboard" )
            local scene = storyboard.newScene()
            
            -- Called when the scene's view does not exist:
            function scene:createScene( event )
                local group = self.view
            
            end
            

            -- 场景在屏幕上移动后立即调用:

            function scene:enterScene( event )
                local group = self.view
                --purge level
                local previous_scene_name = storyboard.getPrevious()
                print("previous",previous_scene_name)
                --storyboard.removeScene(previous_scene_name)
                storyboard.purgeScene( previous_scene_name )
                --go back to level, by loading it from scratch
                storyboard.gotoScene( previous_scene_name, "fade", 250 )
            end
            

            -- 当场景即将移出屏幕时调用:

            function scene:exitScene( event )
                local group = self.view
            end
            

            -- 如果场景的视图被移除,scene:destroyScene() 将在之前调用:

             function scene:destroyScene( event )
                    local group = self.view
                end
            
            
            -- "createScene" event is dispatched if scene's view does not exist
            
                scene:addEventListener( "createScene", scene )
            
            
            -- "enterScene" event is dispatched whenever scene transition has finished
            
                scene:addEventListener( "enterScene", scene )
            
            
            -- "exitScene" event is dispatched whenever before next scene's transition begins
            scene:addEventListener( "exitScene", scene )
            
            -- "destroyScene" event is dispatched before view is unloaded, which can be
            -- automatically unloaded in low memory situations, or explicitly via a call to
            -- storyboard.purgeScene() or storyboard.removeScene().
            scene:addEventListener( "destroyScene", scene )
            
            return scene
            

            【讨论】:

              【解决方案6】:

              您还可以使用此方法重新加载同一屏幕: timer.performWithDelay(500, function()director:changeScene("你的场景名称")); 但在调用上述函数之前,需要将显示组中的所有对象移除。

              【讨论】:

                【解决方案7】:

                您可以创建一个重新加载场景, 并调用它来加载任何场景。 像这样

                composer.gotoScene("Scene.Reload" , 
                    {
                        params = 
                        {
                            reloadSceneOptions = 
                            {
                                effect = "slideLeft",
                                time = 500,
                            },
                            reloadSceneName = SceneName
                        }
                    })
                

                你的重新加载场景代码就像

                elseif phase == "did" then
                    local reloadSceneOptions = event.params.reloadSceneOptions
                    local reloadSceneName = event.params.reloadSceneName
                
                    composer.removeScene( reloadSceneName )
                    composer.gotoScene( reloadSceneName , reloadSceneOptions )
                end 
                

                【讨论】:

                  猜你喜欢
                  • 2013-07-31
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-08-15
                  相关资源
                  最近更新 更多