加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x 3.x 布景层Layer

发布时间:2020-12-14 17:08:22 所属栏目:百科 来源:网络整理
导读:布景层 Layer 是 Node 类的子类, Layer 的特殊之处在于它可以响应事件。在实际项目中, Layer 也是一个容器,作为精灵、菜单、等等的容器。 Scene 是 Layer 的容器, Scene 可以用来管理 Layer ,而 Layer 又是其它对象的容器。 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的子类,在后续使用到的时候再继续细的分析。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读