zoukankan      html  css  js  c++  java
  • quick cocos2d x场景切换的生命周期函数调用学习

    先上一个场景的基本模版:

     1 local ModelScene = class("ModelScene", function()
     2     return display.newScene("ModelScene")
     3 end)
     4 
     5 function ModelScene:ctor()
     6      self.sceneName = "ModelScene"
     7     -- 注册点击事件监听
     8     self.layer = display.newLayer()
     9     self.layer:addTouchEventListener(function(event, x, y)
    10         return self:onTouch(event, x, y)
    11     end)
    12     self:addChild(self.layer)
    13     
    14 end
    15 
    16 function ModelScene:onTouch( event, x, y )
    17     if event == "began" then
    18         return true
    19     elseif event == "moved" then
    20         return true
    21     elseif event == "ended" then
    22         
    23     end
    24 end
    25 
    26 function ModelScene:onEnter()
    27 
    28     -- 框架结构
    29     self.layer:setTouchEnabled(true)
    30 
    31     if device.platform == "android" then
    32         -- avoid unmeant back
    33         self:performWithDelay(function()
    34             -- keypad layer, for android
    35             local layer = display.newLayer()
    36             layer:addKeypadEventListener(function(event)
    37                 if event == "back" then app.exit() end
    38             end)
    39             self:addChild(layer)
    40 
    41             layer:setKeypadEnabled(true)
    42         end, 0.5)
    43     end
    44 end
    45 
    46 function ModelScene:onExit()
    47     self.sceneName = nil
    48 end
    49 
    50 function ModelScene:onCleanup()
    51     
    52 end
    53 
    54 function ModelScene:onExitTransitionStart()
    55     
    56 end
    57 
    58 function ModelScene:onEnterTransitionFinish()
    59 
    60 end
    61 
    62 
    63 return ModelScene

    依据这个模版,写了一个测试模型。两个场景的切换:(PuzzleScene && DemoScene)

    在生命周期函数中添加语句打印。控制台输出结果。

    1)首先进入的是PuzzleScene,点击跳转到DemoScene,执行语句:

    PuzzleScene执行的顺序是:onExitTransitionStart -> onExit -> onCleanup

    DemoScene执行的顺序是:ctor -> onEnter -> onEnterTransitionFinish

    2)再从DemoScene进入PuzzleScene,执行语句如下:

    对比可知:正好和上面的情况反过来了。

    场景退出时,需要注意的是最后调用的函数是cleanup。

    知道了这五个生命函数和一个构造函数在场景切换的顺序后,就可以在程序中恰当的进行资源释放等操作。

    至于为什么这么个执行顺序,需要先看quick库的这个代码:

    通过self:registerScriptHandler(handler)注册了回调监听函数。这样在场景切换的时候就可以按照回调函数传回来的event,来执行相应的生命周期函数了。

    Lua注册监听函数后,其实真正的场景切换执行者还是C++代码。所以~~~Lua更像是一个层,附在了C++的躯体上,

    通过tolua++工具,生成中间的lua到c++的调用转换函数。

  • 相关阅读:
    Caused by: org.xml.sax.SAXParseException; lineNumber: 102; columnNumber: 25; cvc-complex-type.2.4.b:
    org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be res
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate column name 'stuNo'
    java.net.UnknownHostException: you.hai.com
    ContextLoaderListener类(spring源码解析)
    perl DELETE 加请求头
    perl get请求加请求头
    perl PUT 请求加请求头
    perl post 请求加请求头
    Perl 模拟DELETE 请求
  • 原文地址:https://www.cnblogs.com/vokie/p/3819027.html
Copyright © 2011-2022 走看看