Cocos2d-x 3.x 布景层Layer

布景层LayerNode类的子类,Layer的特殊之处在于它可以响应事件。在实际项目中,Layer也是一个容器,作为精灵、菜单、等等的容器。SceneLayer的容器,Scene可以用来管理Layer,而Layer又是其它对象的容器。Layer就是因为它可以响应事件而变的这么厉害。它可以处理触摸、键盘和重力计事件。下面我们就来看看实际工作中是如何使用Layer的,关于事件处理,后续会专门总结,这里就不涉及事件的处理了。

实际是怎么做的?

在实际开发中,我们建立自己的布景层,通常会建立一个新的类,这个新的类的父类Layer。比如以下代码

class HelloWorld : public cocos2d::Layer { public: static cocos2d::Scene* createScene(); virtual bool init(); // implement the "static create()" method manually CREATE_FUNC(HelloWorld); };

HelloWorld就是我们创建的新的Layer函数createScene()返回包含该LayerScene,它的实现如下:

Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; }

代码是通过HelloWorld::create()创建的这个Layer,但是HelloWorld::create()是哪来的?在HelloWorld类中并没有这个静态函数啊。这就需要说说在HelloWorld类中的CREATE_FUNC宏,该宏的定义如下:

#define CREATE_FUNC(__TYPE__) \ static __TYPE__* create() \ { \ __TYPE__ *pRet = new __TYPE__(); \ if (pRet && pRet->init()) \ { \ pRet->autorelease(); \ return pRet; \ } \ else \ { \ delete pRet; \ pRet = NULL; \ return NULL; \ } \ }

很清楚的看到,该宏扩展开来以后,就是创建Layercreate函数,在create函数中又调用init函数init函数Layer函数中的一个函数,我们继承自Layer类以后,需要实现该虚函数,完成Layer的初始化,比如需要在Layer中放哪些元素啊,等等内容

在实际开发中,我们就是这么做的,后续我会通过实际的游戏实例进行分析。Layer是很多类的父类,下面就通过Layer的两个具体的子类来用一用Layer

颜色布景层类LayerColor

颜色布景类LayerColor类是Layer类的子类,包含了Layer类的特性,并且还可以为布景层添加颜色和设置布景层的透明度。

auto scene = Scene::create(); auto layer = LayerColor::create(Color4B(255, 0, 100)); scene->addChild(layer);

这样就创建了一个带有颜色布景层的场景。LayerColor类作为一个带颜色的布景层,在开发中可以给我们做特效带来方便,后续会总结如何使用颜色布景层做一些特效。

多层布景层类LayerMultiplex

在游戏开发中,一般会把游戏分为两部分:一部分是游戏界面部分,也就是常说的UI部分;另 一部分就是游戏本身部分。有时UI有很多页面,在页面中用的图也并不是很多,不需要使用切换场景,只需把不同页面做成不同的布景层,然后切换布景层。那么这就需要一个“管理者” 来管理这些界面,这时候就要使用LayerMultiplex类。

在很多游戏中都需要在不同的界面中使用相同的几个变量,如果不使用LayerMultiplex,就需要做大量的变量保存工作,那样你就会深陷变量的泥潭当中。

总结

继承自Layer的子类还有很多,比如MenuControl等等。而这些继承自Layer的子类,在后续使用到的时候再继续细的分析。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...