zoukankan      html  css  js  c++  java
  • Cocos2d-x init() 和 onEnter() 区别

    在Cocos2d-x中经常碰到 init() 和 onEnter()

    init()和onEnter()这两个方法都是CCNode的方法。

    1.二者的执行顺序是:先init() 后onEnter()。


    2.init()在类的初始化时只会调用一次。


    3.onEnter在该类被载入场景的时候被调用,可能会发生多次。


    下面提供这样一个demo判断二者的执行顺序:

    BaseFile.h

    #ifndef __trydemo__BaseFile__
    #define __trydemo__BaseFile__
    
    #include <iostream>
    #include "cocos2d.h"
    USING_NS_CC;
    class BaseFile:public CCLayer
    {
    public:
        bool init();
        void onEnter();
        CREATE_FUNC(BaseFile);
    };
    #endif /* defined(__trydemo__BaseFile__) */

    BaseFile.cpp

    #include "BaseFile.h"
    
    bool BaseFile::init()
    {
        if (!CCLayer::init()) {
            return false;
        }
        CCLog("base layer init;");
        return true;
    }
    
    void BaseFile::onEnter()
    {
        CCLog("base layer onEnter;");
    }

    NextFile.h

    #ifndef __trydemo__NextFile__
    #define __trydemo__NextFile__
    
    #include <iostream>
    #include "BaseFile.h"
    
    class NextFile:public BaseFile
    {
    public:
        static CCScene* scene();
        bool init();
        void onEnter();
        CREATE_FUNC(NextFile);
    };
    #endif /* defined(__trydemo__NextFile__) */

    NextFile.cpp

    #include "BaseFile.h"
    
    bool NextFile::init()
    {
        if (!BaseFile::init()) {
            return false;
        }
        CCLog("next layer init;");
        return true;
    }
    
    void NextFile::onEnter()
    {
        BaseFile::onEnter();
        CCLog("next layer onEnter;");
    }
    
    CCScene* NextFile::scene()
    {
        CCScene *scene = CCScene::create();
        NextFile * layer = NextFile::create();
        scene->addChild(layer);
        return scene;
    }


    程序run NextFile这个场景。

    终端执行结果:

    Cocos2d: base layer init;
    Cocos2d: next layer init;
    Cocos2d: base layer onenter;
    Cocos2d: next layer onenter;


  • 相关阅读:
    【转载】用opencv中的CvEM做GMM的训练
    关于OpenCV做图像处理内存释放的一些问题
    关于C++ vector的拷贝
    VS2015创建的C++程序在Debug模式下不能调试
    OpenCV中IplImage和Mat间的相互转换
    视频资源下载方法[download video resources]
    关于win10安装VisualSVN遇到的一个问题及解决办法
    win7启动出现蓝屏STOP: 0X0000007B
    CentOS下挂在NTFS分区
    硬盘类型和Linux的分区
  • 原文地址:https://www.cnblogs.com/pangblog/p/3295254.html
Copyright © 2011-2022 走看看