【问题标题】:Understanding Scenes in Corona SDK了解 Corona SDK 中的场景
【发布时间】:2013-06-21 18:53:33
【问题描述】:

我对 Corona非常是新手。

在我的游戏中,我希望有一个包含多个选项的菜单(例如“单人游戏”或“设置”)。当点击其中任何一个选项时,屏幕会消失并出现一个新选项。

下一个屏幕(例如在点击“单人游戏”之后)应该有一些文本,例如“选择你的角色”,一旦用户点击他们的角色,另一个屏幕就会淡入,等等。

我想知道我所说的是否称为场景,如果不是,它们是什么以及它们是如何工作的?

请随意解释,或者如果太多,请发布指向可理解来源的链接,例如另一个堆栈溢出问题或 youtube 视频。

还有一件事,是否可以让用户滑动屏幕,这会触发将他/她带回不同屏幕/场景的事件?

【问题讨论】:

    标签: storyboard coronasdk scene corona-storyboard


    【解决方案1】:

    这里是了解电晕故事板的链接:Corona storyboard

    是的,您可以使用滑动事件来触发屏幕分页。为此,请参阅此问题: How to slide pages in Corona SDK

    【讨论】:

    • Storyboard 不再支持,目前corona推荐的场景管理器是composer
    【解决方案2】:

    corona 支持的当前场景管理器是 composer(情节提要已弃用,未来将无法使用)

    电晕中的场景由composer管理和处理

    这是composer tutorial的链接

    每个场景都有它响应的以下事件:

    • create
    • show
    • hide
    • destroy

    了解场景生命周期的关键是您需要记住create 事件只会被调用一次,直到场景被销毁。

    事件show被调用每次场景显示

    事件hide 被调用每次场景被解除。

    事件destroy 仅在操作系统决定删除该场景的内存时才被调用。在您退出应用之前,这可能不会发生。

    【讨论】:

      【解决方案3】:

      是的,所有计划都可以使用场景来完成,用于有组织的游戏。

      对于每个场景,您都可以遵循this page 末尾的推荐格式。我将在此答案的末尾键入它。

      一旦你有了场景,你就可以用:

      storyboard.gotoScene("name_Of_The_Scene")
      

      并删除场景

      storyboard.purgeScene("name_Of_The_Scene")
      

      我认为您可以使用电晕的触摸事件来实现滑动效果(它们非常易于使用)。就我而言,我使用具有场景之间过渡效果的按钮。

      场景推荐格式

      (用于复制和粘贴)

      local storyboard = require( "storyboard" )
      local scene = storyboard.newScene()
      
      ----------------------------------------------------------------------------------
      -- 
      --      NOTE:
      --      
      --      Code outside of listener functions (below) will only be executed once,
      --      unless storyboard.removeScene() is called.
      -- 
      ---------------------------------------------------------------------------------
      
      
      -- local forward references should go here --
      
      
      ---------------------------------------------------------------------------------
      -- BEGINNING OF YOUR IMPLEMENTATION
      ---------------------------------------------------------------------------------
      
      -- Called when the scene's view does not exist:
      function scene:createScene( event )
              local group = self.view
      
          -----------------------------------------------------------------------------
      
          --      CREATE display objects and add them to 'group' here.
          --      Example use-case: Restore 'group' from previously saved state.
      
          -----------------------------------------------------------------------------
      
      end
      
      
      -- Called BEFORE scene has moved onscreen:
      function scene:willEnterScene( event )
             local group = self.view
      
           -----------------------------------------------------------------------------
      
           --      This event requires build 2012.782 or later.
      
           -----------------------------------------------------------------------------
      
      end
      
      
      -- Called immediately after scene has moved onscreen:
      function scene:enterScene( event )
              local group = self.view
      
               -----------------------------------------------------------------------------
      
              --      INSERT code here (e.g. start timers, load audio, start listeners, etc.)
      
              -----------------------------------------------------------------------------
      
       end
      
      
       -- Called when scene is about to move offscreen:
       function scene:exitScene( event )
               local group = self.view
      
               -----------------------------------------------------------------------------
      
               --      INSERT code here (e.g. stop timers, remove listeners, unload     sounds,etc.)
      
      -----------------------------------------------------------------------------
      
       end
      
      
      -- Called AFTER scene has finished moving offscreen:
      function scene:didExitScene( event )
              local group = self.view
      
          -----------------------------------------------------------------------------
      
          --      This event requires build 2012.782 or later.
      
          -----------------------------------------------------------------------------
      
       end
      
      
       -- Called prior to the removal of scene's "view" (display group)
        function scene:destroyScene( event )
               local group = self.view
      
               -----------------------------------------------------------------------------
      
               --      INSERT code here (e.g. remove listeners, widgets, save state, etc.)
      
               -----------------------------------------------------------------------------
      
       end
      
      
      -- Called if/when overlay scene is displayed via storyboard.showOverlay()
       function scene:overlayBegan( event )
               local group = self.view
               local overlay_name = event.sceneName  -- name of the overlay scene
      
               -----------------------------------------------------------------------------
      
               --      This event requires build 2012.797 or later.
      
               -----------------------------------------------------------------------------
      
       end
      
      
       -- Called if/when overlay scene is hidden/removed via storyboard.hideOverlay()
        function scene:overlayEnded( event )
               local group = self.view
               local overlay_name = event.sceneName  -- name of the overlay scene
      
               -----------------------------------------------------------------------------
      
               --      This event requires build 2012.797 or later.
      
               -----------------------------------------------------------------------------
      
       end
      
      
      
        ---------------------------------------------------------------------------------
        -- END OF YOUR IMPLEMENTATION
        ---------------------------------------------------------------------------------
      
       -- "createScene" event is dispatched if scene's view does not exist
        scene:addEventListener( "createScene", scene )
      
        -- "willEnterScene" event is dispatched before scene transition begins
        scene:addEventListener( "willEnterScene", scene )
      
       -- "enterScene" event is dispatched whenever scene transition has finished
        scene:addEventListener( "enterScene", scene )
      
        -- "exitScene" event is dispatched before next scene's transition begins
        scene:addEventListener( "exitScene", scene )
      
        -- "didExitScene" event is dispatched after scene has finished transitioning out
        scene:addEventListener( "didExitScene", 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 )
      
       -- "overlayBegan" event is dispatched when an overlay scene is shown
       scene:addEventListener( "overlayBegan", scene )
      
       -- "overlayEnded" event is dispatched when an overlay scene is hidden/removed
       scene:addEventListener( "overlayEnded", scene )
      
        ---------------------------------------------------------------------------------
      
        return scene
      

      【讨论】:

        【解决方案4】:

        您还可以尝试一个流行的第三方场景管理器,称为 Director 类。它不是 Corona 内置的,但更易于学习。

        http://developer.coronalabs.com/code/director-class-10

        【讨论】:

        • 这曾经是 Corona 中管理场景的首选方式,但自从引入 Storyboard(现已删除)和 Composer 之后,就不再需要使用它了。
        猜你喜欢
        • 1970-01-01
        • 2016-04-12
        • 1970-01-01
        • 1970-01-01
        • 2015-11-13
        • 1970-01-01
        • 2019-12-19
        • 1970-01-01
        • 2013-07-20
        相关资源
        最近更新 更多