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;


  • 相关阅读:
    原生JavaScript封装insertAfter方法
    SQL截取最后一个由字符分隔的字符串
    给标识列显示的添加数据(IDENTITY_INSERT 为 ON)
    C#保留两位小数,四舍五入的函数及使用方法
    UEditor1.4.3上传图片提示上传失败
    SQL Server 2005公用表表达式(CTE)
    UEditor 粘贴表格时报错导致无法粘贴的解决方法
    事件监听机制
    数组中的趣味题(一)
    redis的工具类封装
  • 原文地址:https://www.cnblogs.com/pangblog/p/3295254.html
Copyright © 2011-2022 走看看