cocos2d-x 3.2 最上层layer

2015年01月26日 11:10 0 点赞 0 评论 更新于 2025-11-21 15:29

在 cocos2d-x 开发中,有时我们需要添加一个最上层的 Layer(顶层 Layer),这里的最上层是指不会因为 Scene 的切换而被切换掉的层。下面我们将详细介绍如何为 cocos2d-x 添加最上层 Layer。

1. 修改 Director 类

1.1 在 Director 头文件中添加成员变量和方法声明

在 Director 的头文件里添加以下内容:

CCLayer *m_pTopLayer;
// set the topLayer
void setTopLayer(CCLayer *layer);

1.2 在 Director 的 .cpp 文件中实现 setTopLayer 方法

void CCDirector::setTopLayer(CCLayer *layer)
{
m_pTopLayer = layer;
}

1.3 在 drawScene 方法中添加绘制顶层 Layer 的代码

若要让顶层 Layer 显示在设备上,需要在 drawScene(void) 方法里加入以下代码:

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

至此,Director 的修改完成。

2. 编写顶层 Layer 类 WindyTopLayer

2.1 WindyTopLayer.h 文件

#ifndef __HeroLegend__WindyTopLayer__
#define __HeroLegend__WindyTopLayer__

#include "cocos2d.h"

class WindyTopLayer : public cocos2d::CCLayer
{
/// @{
/// @name constructors
public:
CREATE_FUNC(WindyTopLayer);
WindyTopLayer();
virtual ~WindyTopLayer();
static WindyTopLayer *getInstace();
/// @} end constructors

/// @{
/// @name methods
public:
bool init();
void addNode(cocos2d::CCNode* node);
void showUI();
void removeUI();
/// @} end methods
};

#endif /* defined(__HeroLegend__WindyTopLayer__) */

2.2 WindyTopLayer.cpp 文件

#include "WindyTopLayer.h"
USING_NS_CC;

static WindyTopLayer* m_topLayer = NULL;

WindyTopLayer::WindyTopLayer()
{
}

WindyTopLayer::~WindyTopLayer()
{
}

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

bool WindyTopLayer::init()
{
if (!CCLayer::init()) {
return false;
}
return true;
}

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

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

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

以上代码的逻辑较为基础,相信大家都能理解。通过上述步骤,我们就可以在 cocos2d-x 中添加一个不会因 Scene 切换而改变的顶层 Layer 了。

作者信息

feifeila

feifeila

共发布了 3994 篇文章