Layer是处理玩家事件响应的Node子类,它通常包含的是直接在屏幕上呈现的内容。
Layer的作用主要包括两方面:2.用来显示sprite、文本等游戏元素,并设置游戏元素的属性,比如位置、方向、大小、动作等。
addChild(Node child); addChild(Node child, int zOrder); addChild(Node *child, int zOrder, int tag)对于场景而言,通常我们添加的节点就是层。 新添加的层会覆盖到之前添加的层之上,我们可以通过指定zOrder的值来修改layer的层级次序。tag是元素的标识号码,如果为子节点设置tag值,就可以在它的父节点中利用tag的值找到它。
//通过create()方法直接创建layer auto layer = Layer::create(); //将layer添加到父节点上 this->addChild(layer);
1).创建新类的头文件MyLayer.h和C++文件MyLayer.cpp,并让该类继承自Layer类,注意新创建的这两个文件既要放在cocos整个项目工程的Class文件目录下,又要放在我们运行平台对应的工程目录下,由于我是在win平台上的sln工程,所以我还要将这两个文件拷贝一份放在proj.win32这个工程目录下。
2).在.h头文件中声明重写的init()和create()方法。我们看一下.h头文件://MyLayer.h文件 #ifndef __MY_LAYER_H__ #define __MY_LAYER_H__ #include"cocos2d.h" class MyLayer : public cocos2d::Layer { public: MyLayer(); ~MyLayer(); //重写init()方法 virtual bool init(); //通过宏函数重写create()方法 //宏函数CREATE_FUNC()可在cocos源文件CCPlatformMacros.h中看到 CREATE_FUNC(MyLayer); }; #endif // __MY_LAYER_H__3).在C++文件中实现init()方法,create()方法通过之前调用宏函数实现所以不需要我们再去实现了;
//MyLayer.h文件 #include "MyLayer.h" using namespace cocos2d; MyLayer::MyLayer() { } MyLayer::~MyLayer() { } bool MyLayer::init() { //如果父类init()初始化失败 if (!Layer::init()) { return false; } return true; }4).在需要使用该Layer的场景上添加layer;
auto layer = MyLayer::create(); this->addChild(layer);在我们的实际开发中这种通过继承创建layer的方法较为常见,因为在项目开发时往往是分模块进行开发的,而不同的模块通常要在不同的layer里面。