• CoronaSDK场景管理库:Composer library (下)


    1 覆层场景

    composer允许你拥有一个覆层场景。(在任何时刻,只能有一个覆层场景被显示)这是一种特殊的场景,可以加载之后覆盖在活动场景(父场景)之上。一个覆层场景的结构,和其他composer场景并无二致。

    1.1 显示一个覆层场景

    为了显示一个覆层场景,需要调用函数composer.showOverlay()。因为一个覆层场景一般不会覆盖住整个场景,用户可能随时和底下的父场景发生交互。如果你想阻止用户和父场景交互的话,那么可以把option中的isModal参数设置为true。这样做就可以阻止touch/tap事件穿过覆层场景到达父场景。

    local options = {
        effect = "fade",
        time = 500,
        isModal = true
    }
    composer.showOverlay( "inventory", options )

    当覆层场景被加载,他和其他场景一样都需要处理他的事件。也就是scene:create()、scene:show()、scene:hide()和scene:destroy()将和其他场景一样的调用规则。

    1.2 隐藏一个覆层场景

    为了隐藏一个覆层场景,并返回父场景,可以使用composer.hideOverlay()调用,例如:

    composer.hideOverlay( "fromBottom", 400 )

    这个调用可以来自覆层场景,也可以来自父场景,或者来自其他事件处理函数,例如安卓的“back”键。当你通过composer.gotoScene()跳转到其他场景时,就会自动将覆层场景隐藏。

    小结:

    覆层场景似乎适合制作游戏中的弹出窗口,无论是局部弹窗还是全屏弹窗。可以在其他场景中随时调出,也可以随时隐藏。结合不同的转场特效,覆层场景制作游戏弹窗应该是不错的选择。

    类似一些app的底部常驻的导航按钮,貌似不适合使用覆层场景,因为使用gotoScene切换场景的时候会自动隐藏覆层场景。那些功能可能更适合做成脱离于scene的displayObject。

    1.3 访问父场景

    当显示或隐藏一个覆层场景时,你可能需要对父场景做一些动作。例如,你可能需要从覆层场景中手机一些输入或选择,然后更新数据到父场景中。在Composer中,覆层场景可以通过event.parent来访问父场景对象。这允许你访问父场景的属性和方法,并在覆层场景显示或隐藏时和父场景对象通信。例如:

    ------------------------------------------------------------------------------
    -- In "scene1.lua" (parent scene)
    ------------------------------------------------------------------------------
    local composer = require( "composer" )
    
    local scene = composer.newScene()
    
    -- Custom function for resuming the game (from pause state)
    function scene:resumeGame()
        --code to resume game
    end
    
    -- Options table for the overlay scene "pause.lua"
    local options = {
        isModal = true,
        effect = "fade",
        time = 400,
        params = {
            sampleVar = "my sample variable"
        }
    }
    
    -- By some method (a pause button, for example), show the overlay
    composer.showOverlay( "pause", options )
    
    return scene
    
    ------------------------------------------------------------------------------
    -- In "pause.lua"
    ------------------------------------------------------------------------------
    local composer = require( "composer" )
    
    local scene = composer.newScene()
    
    function scene:hide( event )
        local sceneGroup = self.view
        local phase = event.phase
        local parent = event.parent  --reference to the parent scene object
    
        if ( phase == "will" ) then
            -- Call the "resumeGame()" function in the parent scene
            parent:resumeGame()
        end
    end
    
    -- By some method (a "resume" button, for example), hide the overlay
    composer.hideOverlay( "fade", 400 )
    
    scene:addEventListener( "hide", scene )
    return scene

    2 其他 方法/属性

    Composer提供了一些便捷的方法和属性来协助你进行场景管理。

    2.1 set/get变量

    你可以存储全局的名值对变量到composer模块中,这些值可以在场景间被互相访问。为了设置一个可能被另一个composer场景访问的变量,可以使用composer.setVariable()函数,例如:

    composer.setVariable( "gameLevel", 1 )
    composer.setVariable( "playerName", "Zorron" )

    然后,为了从另一个场景获得这个变量:

    local playerName = composer.getVariable( "playerName" )

    2.2 获得一个场景名

    为了获得一个场景名,可以使用composer.getSceneName()函数,传给它一个字符串,值为下面的其中一个:

    • "current":获得当前场景名
    • "previous":获得之前显示的一个场景名
    • "overlay":获得覆层场景的名字(如果它在显示中)
    local currScene = composer.getSceneName( "current" )
    local prevScene = composer.getSceneName( "previous" )
    local overlayScene = composer.getSceneName( "overlay" )

    3 Composer Stage Object

    composer.stage属性会返回一个顶层的composer的display group的引用,所有场景的view对象都被插入其中。你可以理解为“compose场景层”,这在当你需要放置一个显示对象到所有composer场景之上或之下时,会很有用,甚至在动画特效进行期间。例如:

    • 一个被显示在所有composer场景下面的背景图片,始终保持静止,甚至在场景切换期间都静止
    • 一个一直显示在所有composer场景顶层的tab或UI bar
    • HUD(顶层显示)的元素,例如血量、分数等

    举个例子:

    composer.stage:toBack()
    
    composer.stage:toFront()

    4 场景调试

    composer.isDebug属性可以切换"composer调试模式",如果设置为true,通常在corona模拟器控制台会打印有用的调试信息。在构建用于部署的项目之前,应该把设置为false(默认值)。

  • 相关阅读:
    varnish反向代理
    Asp.Net MVC 3.0
    反向代理(Reverse Proxy)
    Go语言开发Windows应用
    Windows下安装NodeJS和CoffeeScript方法
    数据库设计....
    发布一个开源的c++网络事件库
    非小型电子商务系统设计经验分享 Coding changes the world
    SqlServer查询计划
    cocos2dx总结(一)HelloWord
  • 原文地址:https://www.cnblogs.com/leezj/p/4235666.html
Copyright © 2020-2023  润新知