• cocos2dx 顶层layer


    如何在cocos2dx里添加顶层layer
    所谓顶层layer,是指不会因为scene的切换而切换掉的层!

    构造示意图如下:
    screenshot.png在director的头文件里添加CCLayer *m_pTopLayer;和
    ////   set the topLayer

        void setTopLayer(CCLayer *layer);

    在.cpp里加上以下代码

    voidCCDirector::setTopLayer(CCLayer *layer)
    {
        m_pTopLayer = layer;

    }
    上面的只是设置layer,如果我们要让其显示在设备上,我们还需要添加以下代码,在drawScene(void)方法里加入以下代码

    // draw the top layer
       
     if (m_pTopLayer) {
           
     m_pTopLayer->visit();

        }
    这样了我们的director已经改完了!
    之后我们就写TopLayer了
    WindyTopLayer.h:
     

    #ifndef __HeroLegend__WindyTopLayer__
    #define __HeroLegend__WindyTopLayer__

    #include "cocos2d.h"

    class WindyTopLayer : publiccocos2d::CCLayer
    {
        /// @{
        /// @name constructors
    public:
        CREATE_FUNC(WindyTopLayer);
        WindyTopLayer();
        virtual ~WindyTopLayer();
        staticWindyTopLayer *getInstace();
        /// @} end constructors
       
        /// @{
        /// @name methods
    public:
        bool init();
        void addNode(cocos2d::CCNode* node);
        void showUI();
        void removeUI();
        /// @} end methods
    };

    #endif /* defined(__HeroLegend__WindyTopLayer__) */
     
    WindyTopLayer.cpp:
     

    #include "WindyTopLayer.h"

    USING_NS_CC;

    staticWindyTopLayer* m_topLayer = NULL;

    WindyTopLayer::WindyTopLayer()
    {
    }

    WindyTopLayer::~WindyTopLayer()
    {
    }

    WindyTopLayer *WindyTopLayer::getInstace()
    {
        if (m_topLayer == NULL) {
            m_topLayer = WindyTopLayer::create();
            m_topLayer->retain();
        }
        returnm_topLayer;
    }

    boolWindyTopLayer::init()
    {
        if (!CCLayer::init()) {
            returnfalse;
        }
        returntrue;
    }

    voidWindyTopLayer::addNode(cocos2d::CCNode* node)
    {
        addChild(node);
        showUI();
    }

    voidWindyTopLayer::showUI()
    {
        if (m_topLayer) {
            m_topLayer->onEnter();
            CCDirector::sharedDirector()->setTopLayer(m_topLayer);
        }
    }

    voidWindyTopLayer::removeUI()
    {
        m_topLayer->removeAllChildren();
        m_topLayer->onExit();
        CCDirector::sharedDirector()->setTopLayer(NULL);
        m_topLayer->removeFromParent();

    }
    逻辑的话,相信大家都能看得懂,都是些基本东西!
  • 相关阅读:
    web开发(六) EL表达式
    web开发(五) JSP详解(四大作用域九大内置对象等)
    web开发(四) 一次性验证码的代码实现
    Netty4
    Android Fragment
    Android 6.0 双向通话自动录音
    安卓
    SpringMVC + Spring + Mybatis+ Redis +shiro以及MyBatis学习
    Spring 3 AOP 概念及完整示例
    Java并发之CountDownLatch、CyclicBarrier和Semaphore
  • 原文地址:https://www.cnblogs.com/conerlius/p/3167036.html
Copyright © 2020-2023  润新知