zoukankan      html  css  js  c++  java
  • 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(默认值)。

  • 相关阅读:
    Linux学习笔记-Shell和命令基础
    转载 | 辗转相除法
    C语言字符数组应用示例2:用二维数组输出一个菱形图案
    C语言字符数组应用示例1:编写一个程序,将两个字符串连接起来,不用strcat函数。
    C语言字符数组超细讲解
    C语言二维数组的应用举例
    C语言二维数组超细讲解
    Java同步方法:synchronized到底锁住了谁?
    家乐的深度学习笔记「5」
    工程中的算法应用
  • 原文地址:https://www.cnblogs.com/leezj/p/4235666.html
Copyright © 2011-2022 走看看