cocos2dx-3.0(24) onEnter()、onExit()、init()等场景生命周期函数介绍

cocos2dx-3.0(24) onEnter()、onExit()、init()等场景生命周期函数介绍,第1张

概述层(Layer)的生命周期函数按如下的顺序进行: 1、init()初始化层调用(在类初始化时,只会调用一次)。 2、onEnter()进入层时候调用(init初始完后进入,可能调用多次,如addChild一次就会调用一次)。 3、onEnterTransitionDidFinish()进入层而且过渡动画结束时候调用(onEnter结束后进入)。 4、onExit()退出层时候调用。 5、onExi

层(Layer)的生命周期函数按如下的顺序进行:


1、init()初始化层调用(在类初始化时,只会调用一次)。

2、onEnter()进入层时候调用(init初始完后进入,可能调用多次,如addChild一次就会调用一次)。

3、onEnterTransitionDIDFinish()进入层而且过渡动画结束时候调用(onEnter结束后进入)。

4、onExit()退出层时候调用。

5、onExitTransitionDIDStart()退出层而且开始过渡动画时候调用(onExit结束后进入)。

6、cleanup()层对象被清除时候调用(整个layer销毁时进入)。


引用stackoverflow上大神的一段话

"cocos2dx类似于objective-c一样,有两种方式来申请内存、创建对象,一种是静态函数creater,另一种是在他自己

的init里面,在这两函数里面申请内存、创建对象能让程序正常运行,但是当对象将到去展示或者或者被添加到另一个

容器中时,他会调用onEnter,也就是响应上面说的,最好不要在onEnter做内存方面的 *** 作!"


我们去看看代码,来验证一下他们的执行顺序

头文件

[cpp] viewplain copy voIDonEnter(); voIDonExit(); voIDcleanup(); voIDonEnterTransitionDIDFinish(); voIDonExitTransitionDIDStart();


源文件里面

boolHelloWorld::init() { ////////////////////////////// //1.superinitfirst if(!Layer@R_403_6004@::initWith@R_403_6004@(@R_403_6004@4B(120,120,255))) { returnfalse; } log("comeintohelloworldinit!!"); autovisibleSize=Director::getInstance()->getVisibleSize(); autoorigin=Director::getInstance()->getVisibleOrigin(); returntrue; } voIDHelloWorld::onEnter() { //原谅我用的是layer@R_403_6004@和layer一样的 Layer@R_403_6004@::onEnter(); log("comeintohelloworldonEnter!!"); voIDHelloWorld::onEnterTransitionDIDFinish() Layer@R_403_6004@::onEnterTransitionDIDFinish(); log("comeintohelloworldonEnterTransitionDIDFinish!!"); } voIDHelloWorld::onExit() Layer@R_403_6004@::onExit(); log("comeintohelloworldonExit!!"); }

看下输出结果:


onEnter()、onExit()、init()等场景生命周期函数介绍" src="http://img.blog.csdn.net/20140714222107625">

onEnter()、onExit()、init()等场景生命周期函数介绍" src="http://img.blog.csdn.net/20140714222120667">


这样他们的执行顺序就很明显了


onEnter()、onExit()、init()等场景生命周期函数介绍" src="http://img.blog.csdn.net/20140714222742041">


注意这些函数在执行自己的代码之前都必须先执行父类的动作,因为在执行addChild *** 作时,会调用每个子节点的onEnter与

onExit,进入与退出父类的节点。去看源码,会发现create()函数里面先会调用init()然后在去调用onEnter,addChild里面

也是这样的。所以总结一点,可以在onEnter里面触发一此 *** 作,但最好不要在里面申请内存或addChild之类的 *** 。

大家去看cpp-tests会发现几乎全用的onEnter,直接使用newObjectxxx()之类的 *** 作来生成对象,直接使用new 这样的 *** 作,

就会进入onEnter里面,如果使用create之类的,就会先进入init在进入onEnter,这两种方式的好与坏,相信大家一目了然,

直接使用构造函数是无法确实是否成功,因为构造函数不会返回值,如果使用init 就能自己定义返回值,并且还能添加很多

*** 作,封装在函数里面,让我们看到接口非常干净。之所以cpp-test里面全是直接onEnter有可能是因为2.x版本时候写的,作

者懒得去更改了,2.x确实很提倡使用onEnter。

总结

以上是内存溢出为你收集整理的cocos2dx-3.0(24) onEnter()、onExit()、init()等场景生命周期函数介绍全部内容,希望文章能够帮你解决cocos2dx-3.0(24) onEnter()、onExit()、init()等场景生命周期函数介绍所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1080984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存