`

Cocos2d-x Lua中生命周期函数

 
阅读更多

场景(Scene)以及所有节点(Node)的生命周期事件如下:
enter。进入场景时候触发。
enterTransitionFinish。进入场景而且过渡动画结束时候触发。
exit。退出场景时候触发 。
exitTransitionDidStart。退出场景而且开始过渡动画时候触发。
cleanup。场景对象被清除时候触发。
提示  GameScene场景中的(Scene)继承于节点(Node),这些生命周期事件根本上是从Node继承而来。事实上所有Node对象(包括:场景、层、精灵等)都有这些事件,具体实现代码与GameScene场景类似。

我们为GameScene场景添加生命周期函数相关代码如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. require "Cocos2d"  
  2. require "Cocos2dConstants"  
  3.   
  4.   
  5. local SettingScene = require("SettingScene")  
  6. local size = cc.Director:getInstance():getWinSize()  
  7.   
  8.   
  9. local GameScene = class("GameScene",function()  
  10.     return cc.Scene:create()  
  11. end)  
  12.   
  13.   
  14. function GameScene.create()  
  15.     local scene = GameScene.new()  
  16.     scene:addChild(scene:createLayer())  
  17.     return scene  
  18. end  
  19.   
  20.   
  21. function GameScene:ctor()                                               ①  
  22.     cclog("GameScene init")  
  23.     --场景生命周期事件处理  
  24.     local function onNodeEvent(event)     
  25.         if event == "enter" then                                            ②  
  26.             self:onEnter()                                                
  27.         elseif event == "enterTransitionFinish" then                                ③  
  28.             self:onEnterTransitionFinish()                                    
  29.         elseif event == "exit" then                                         ④  
  30.             self:onExit()                                                 
  31.         elseif event == "exitTransitionStart" then                              ⑤  
  32.             self:onExitTransitionStart()  
  33.         elseif event == "cleanup" then                                      ⑥  
  34.             self:cleanup()  
  35.         end  
  36.     end  
  37.     self:registerScriptHandler(onNodeEvent)                                 ⑦  
  38. end  
  39.   
  40.   
  41. function GameScene:onEnter()                                            ⑧  
  42.     cclog("GameScene onEnter")  
  43. end  
  44.   
  45.   
  46. function GameScene:onEnterTransitionFinish()                                    ⑨  
  47.     cclog("GameScene onEnterTransitionFinish")  
  48. end  
  49.   
  50.   
  51. function GameScene:onExit()                                             ⑩  
  52.     cclog("GameScene onExit")  
  53. end  
  54.   
  55.   
  56. function GameScene:onExitTransitionStart()                                  ⑪  
  57.     cclog("GameScene onExitTransitionStart")  
  58. end  
  59.   
  60.   
  61. function GameScene:cleanup()                                            ⑫  
  62.     cclog("GameScene cleanup")  
  63. end  
  64.   
  65.   
  66. … …  
  67.   
  68.   
  69. return GameScene  



上述代码第①行GameScene:ctor()是GameScene场景构造函数,在次函数中进行GameScene场景的初始化,也就是触发init事件。第②~⑥行代码场景生命周期事件处理,根据事件event对象判断是哪一种类型的场景生命周期事件。其中第②行是判断enter事件,是场景进入时候触发,判断为true情况下,然后通过代码self:onEnter()调用第⑧行的GameScene:onEnter()函数。
第③行是判断enterTransitionFinish事件,是场景进入并且过渡动画完成时候触发,判断为true情况下,然后通过代码self:onEnterTransitionFinish()调用第⑨行的GameScene:onEnterTransitionFinish()函数。
第④行是判断exit事件,是场景退出时候触发,判断为true情况下,然后通过代码self:onExit()调用第⑩行的GameScene:onExit()函数。
第⑤行是判断exitTransitionStart事件,是场景退出过渡动画开始时候触发,判断为true情况下,然后通过代码self:onExitTransitionStart()调用第⑪行的GameScene:onExitTransitionStart()函数。
第⑥行是判断cleanup事件,是场景销毁时候触发,判断为true情况下,然后通过代码self:cleanup()调用第⑫行的GameScene:cleanup()函数。


如果GameScene是第一个场景,当启动GameScene场景时候,它的调用顺序如下图所示。

 第一个场景启动顺序

提示  GameScene init事件并不是从节点继承的事件(enter、enterTransitionFinish、exit、exitTransitionStart和cleanup),“GameScene init”日志信息是在GameScene:ctor()构造函数中输出的。我们把ctor()构造函数调用与其它的几个事件调用放在一起讨论,那么因为ctor()构造函数是用于初始化场景的,它相当于init事件的作用,因此本书将ctor()构造函数调用都称为“init事件”触发。

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. local function onNodeEvent(event)     
  2.         if event == "enter" then                                            ②  
  3.             self:onEnter()                                                
  4.         elseif event == "enterTransitionFinish" then                                ③  
  5.             self:onEnterTransitionFinish()                                    
  6.         elseif event == "exit" then                                         ④  
  7.             self:onExit()                                                 
  8.         elseif event == "exitTransitionStart" then                              ⑤  
  9.             self:onExitTransitionStart()  
  10.         elseif event == "cleanup" then                                      ⑥  
  11.             self:cleanup()  
  12.         end  

 

更多内容请关注最新Cocos图书《Cocos2d-x实战:Lua卷——Cocos2d-lua开发

本书交流讨论网站:http://www.cocoagame.net

欢迎加入Cocos2d-x技术讨论群:257760386

更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com

《Cocos2d-x实战 Lua卷》现已上线,各大商店均已开售:

京东:http://item.jd.com/11659697.html

欢迎关注智捷iOS课堂微信公共平台,了解最新技术文章、图书、教程信息

分享到:
评论

相关推荐

    《Cocos2d-x实战 Lua卷》源码.7z

    8. **网络通信**:如果源码包含联网功能,可以了解如何在Cocos2d-x中实现网络请求,实现多人在线游戏或同步游戏状态。 9. **性能优化**:查看源码中关于性能优化的技巧,如减少不必要的计算、利用缓存、优化渲染等...

    Cocos2d-x 使用Lua开发基础

    在Cocos2d-x中,Lua的使用通常涉及到以下几个关键概念: 1. **加载和运行Lua脚本**:你可以使用`cocos2d::ScriptEngineManager`的`runScript`方法来加载并运行Lua脚本。这允许你在游戏启动时加载主逻辑或者在运行时...

    cocos2d-x测试代码

    在cocos2d-x中,场景是游戏画面的基本单元,包含了游戏的所有可见元素。 3. `main.cpp`:这是C++应用的主入口文件,包含`main()`函数。在这个例子中,`main()`函数负责初始化cocos2d-x环境,并调用`AppDelegate::...

    cocos2dx lua核心编程(第二版)配套代码

    2. **Lua语言基础**:Lua具有简洁的语法和强大的元编程能力,是Cocos2d-x中常用的脚本语言。学习配套代码时,需要理解Lua的基本数据类型(如数字、字符串、表、布尔值和函数)、控制结构(if-else、for、while等)、...

    cocos2d-x,lua绑定详细操作步骤

    这篇文章将详细介绍如何在Cocos2d-x中进行Lua与C++的绑定,以便于开发者利用两者的优点进行游戏开发。 ### Lua与C++交互原理 1. **tolua++工具**:Lua和C++之间的交互主要依赖于tolua++这样的绑定工具。tolua++...

    cocos2d-x_学习文档

    在实际开发中,我们还需要了解如何创建和管理`CCScene`,这是cocos2d-x中的基本场景单元。每个`CCScene`可以包含一个或多个`CCLayer`,`CCLayer`则可以包含各种游戏对象如精灵(CCSprite)、菜单(CCMenu)等。通过`...

    cocos2d-x 游戏源码,高仿flappybird,

    通过研究这个源码,新手可以了解cocos2d-x的类结构、对象生命周期、动画机制、物理引擎应用等基础知识。此外,还可以学习如何使用cocos2d-x的精灵(Sprite)、动作(Action)和层(Layer)等组件构建游戏世界,以及...

    Cocos2D-X2.2.3学习笔记3(内存管理)

    本笔记将深入探讨Cocos2D-X中的内存管理策略,主要包括对象生命周期、内存分配与释放、引用计数以及智能指针的使用。 1. 对象生命周期:在Cocos2D-X中,每个对象都有其创建、使用和销毁的生命周期。当你创建一个...

    基于cocos2d-x引擎实现飞机大战

    在游戏开发领域,cocos2d-x是一个广泛应用的2D游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,支持跨平台开发,覆盖了iOS、Android、Windows等多个平台。本项目是利用cocos2d-x引擎制作的一款经典游戏...

    Cocos2D-X游戏开发技术精解

    第1章 Cocos2D-X引擎的介绍 1 1.1 何为游戏引擎 1 1.1.1 游戏的核心—引擎 1 1.1.2 引擎的特点 2 1.1.3 知名的引擎介绍 4 1.1.4 引擎的分类 5 1.2 Cocos2D-X引擎的来历 8 1.3 引擎的版本 9 1.4 下载与安装 10 1.5 ...

    cocos2d-x案例开发大全-第2章-cocos2dx3.3实现

    在Cocos2d-x中,`AppDelegate`是程序的主入口点,相当于其他平台上的`main()`函数。`AppDelegate.cpp`包含了`AppDelegate`类的实现,而`AppDelegate.h`定义了该类。在这个例子中,你可能会学习到如何在`AppDelegate`...

    cocos2d-x_2.1.1_EN_API_HTML版

    cocos2d-x是一款跨平台的游戏开发框架,它基于C++,同时提供了JavaScript和Lua的绑定,让开发者可以方便地在多种设备上创建2D游戏、应用或者交互式内容。2.1.1版本作为cocos2d-x历史上的一个重要里程碑,它带来了...

    cocos2d-lua 3x 基础概念(包括场景、导演、在屏幕上显示自定义对象等)代码

    本文将深入探讨 cocos2d-lua 3x 版本中的基础概念,包括场景(Scene)、导演(Director)以及如何在屏幕上显示自定义对象。 一、场景(Scene) 场景是 cocos2d-lua 中的基本构建块,代表了一个游戏或应用的独立...

    cocos2d-x与服务器通讯并解析返回数据全注释版核心封装

    在cocos2d-x中,我们可以使用C++或Lua进行编程,两者都有相应的网络库来处理HTTP请求。对于C++,可以使用`HttpClient`类,这是一个基于libcurl的网络库,能够发送GET、POST等HTTP请求。对于Lua,可以使用`network`...

    cocos-lua:cocos-lua基于lua gc管理c ++对象的生命周期,并支持更多的cocos2dx v4 API

    科科斯卢阿 cocos-lua以cocos2d-x v4的c ++项目为基础,采用基于lua gc来管理c ++对象的生命周期,提供更丰富的cocos2d-x lua api,包括几乎除模版以外的所有lambda(schedule,scheduleOnce ... )函数变量,能够极...

    cocos_lua_雷庭战机源码

    Cocos2d-Lua 的 Director 类负责管理场景的生命周期和过渡效果。 3. **精灵与动画**:游戏中的飞机、敌人、子弹等都是通过精灵(Sprite)实现的。源码会展示如何创建精灵,以及如何使用 Animation 类来制作动态效果...

    cocos4.0 lua api

    Cocos2d-x通过绑定Lua库,使开发者可以直接在Lua中调用C++编写的底层功能,实现了游戏逻辑和渲染的分离,提升了开发效率。 2. **Cocos4.0 Lua API 更新** 在Cocos4.0中,Lua API进行了大量改进,包括但不限于性能...

Global site tag (gtag.js) - Google Analytics