zoukankan      html  css  js  c++  java
  • 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课堂微信公共平台,了解最新技术文章、图书、教程信息

  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/4498599.html
Copyright © 2011-2022 走看看