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(默认值)。

时间: 2024-08-27 23:55:33

CoronaSDK场景管理库:Composer library (下)的相关文章

CoronaSDK场景管理库:Composer library (上)

Composer是corona官方提供的场景创建和管理系统,我大CoronaSDK果然威武! 1 场景者,何也 corona中的每个场景是以一个lua文件的形式出现,多个.lua文件分散在你的项目中组成众多场景.你编写这些lua文件的时候必须遵循一些规则,以便Composer可以正确理解你的场景代码. 场景代码文件中须得包含两样东西,以使得场景可以被正确地初始化: 四个监听函数来处理Composer生成的场景事件 四行监听函数声明以及把场景对象返回的语句 具体的例子呆会可以看后面的场景模版. 因

Php学习之依赖管理工具composer详解

本文和大家分享的主要是php中依赖管理工具composer相关用法,一起来看看吧,希望对大家学习php有所帮助. 什么是依赖管理工具 当你引用某个第三方库时,如果这个库使用到了另外一个或若干个第三方库,再或许另外一个第三方库又有其他的依赖,这样的话手动维护你需要下载安装N个包.用来解决由此产生的问题的工具就叫做依赖管理工具. 有哪些常见的依赖管理工具 Java的maven.gradle,NodeJs的npm,IOS的CocoaPods,PHP的composer 大部分编程语言都会有自己的常用依赖

有用PHP依赖管理工具Composer新手教程

PHP依赖管理工具Composer新手教程 Composer 是 PHP 的一个依赖管理工具.它同意你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理器. 是的,它涉及 "packages" 和 "libraries",但它在每一个项目的基础上进行管理,在你项目的某个文件夹中(比如 vendor)进行安装. 默认情况下它不会在全局安装不论什么东西.因此,这不过一个依赖管理. 这样的想法并不新奇,Composer 受到

php管理工具composer安装&测试

我把它放在系统的PATH目录中,这样就能在全局访问它. curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer 此命令只检查少量的PHP配置,然后下载 composer.phar 文件到你的工作目录,此文件就是Composer执行文件,它是一个PHAR(PHP归档文件,里面可以包含任何文件,并且可以在PHP命令行执行). 测试是否安装成功 composer -V Compo

实用PHP依赖管理工具Composer入门教程

PHP依赖管理工具Composer入门教程 Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 依赖管理 Composer 不是一个包管理器.是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装.默认情况下它不会在全局安装任何东西.因此,这仅仅是一个依赖管理. 这种想法并不新鲜,Composer 受到了 node

分享一个嵌入式httpdserver开发库 - boahttpd library

http://sourceforge.net/projects/boahttpd/ 一个C接口的开发库,适用于 windows/linux/或其它嵌入式平台,支持CGI扩展,支持多线程.採用面向对象开发,一个应用里能够同一时候开多个http server,仅仅要port不同就互不影响.主要应用场景应该是嵌入式应用(所谓boa-server的概念),在须要做一个基本web的设备管理使用.在样例中就是展示,从页面信息的提交.到处理.到结果的返回,里面结合jquery/bootstrap网页技术,能够

boost库在windows下的编译和使用

因为跨平台的原因,现在要使用到boost库,boost库非常大,现在处于摸索阶段. 首先来说boost库在window下的安装和使用. 一.下载 首先从boost官方主页http://www.boost.org/下载最新版boost安装包,或者使用Subversion获取最新版本,地址是:http://svn.boost.org/svn/boost/trunk.本人现在一般都用svn,这样可以很方便的进行update和build,而不是每次都下载新的安装包并rebuild. 二.安装 如果是使用

HTML5 离线缓存管理库

一.HTML5离线缓存技术 支持离线缓存是HTML5中的一个重点,离线缓存就是让用户即使在断网的情况下依然可以正常的运行应用.传统的本地存储数据的方式有 localstorage,sessionstorage和cookie.但是这些传统的方式有着致命的弊端.首先这些传统的存储方式的最大使用空间有 限,最多不超过5M;其次它们处理大规模的结构化数据的能力有限.鉴于传统方式的局限性,HTML5提出了三种新的离线缓存解决方案:Web SQL,indexedDB和File System. 其中Web S

spdk dpdk编译动态库( shared library )

1,dpdk编译共享库 默认情况下都编译出静态库,如果想编译出动态库,把config/common_base文件中的CONFIG_RTE_BUILD_SHARED_LIB改成y即可. 2,spdk编译共享库 修改mk/spdk.common.mk: # Archive $(OBJS) into [email protected] (.so) # Archive $(OBJS) into [email protected] (.a) # LIB_C=\ #       $(Q)echo "  LI