当前位置:C++技术网 > 资讯 > cocos2dx:2 基础概念

cocos2dx:2 基础概念

更新时间:2016-05-26 17:18:16浏览次数:1+次

        cocos2dx是一款底层由c++编写的开源的2d手游引擎。这款引擎的适用人群:javascritp程序员,c++程序员,lua程序员。对于c++来说,需要懂至少“类”这一概念的人。所以,还不懂的人,赶紧学学c++吧。废话不多说。

       一个游戏可以划分为不同的场景,一个场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于节点类Node)。可以执行Action来修改游戏节点的属性,使其移动、旋转、放大、缩小等等。请看下结构图

        关于这些概念,我就借用下官网的文档。(文采不行哈哈)。

        官方文档地址:http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/basic-concepts/zh.md

        导演类(director)

        相当于总管。是整个引擎的核心,也是整个游戏的导航仪。比如OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点(游戏元素)的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等都要由Director类来管理控制的。因为是游戏的总导演,所以导演类使用单例模式。游戏中所有取到用到的导演类,都是同一个对象。

        场景类(scene)

        游戏有很多的场景,比如菜单界面,选关界面,游戏运行界面,游戏结束界面。这个场景类的一个重要作用就是控制所有场景的顺序流程,什么时候展现哪个场景。

        下面是Director控制场景的常用方法:

  • runWithScene( Scene *scene ) 启动游戏,并运行scene场景。本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene-->startAnimation。
  • pushScene( Scene *scene ) 将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景,只有存在正在运行的场景时才调用该方法;
  • replaceScene( Scene *scene ) 直接使用传入的scene替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。
  • popScene() 释放当前场景,再从代码执行场景中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,直接结束应用。和PushScene结对使用
  • end() 释放和终止执行场景,同时退出应用
  • pause() 暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上
  • resume () 恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上

        场景是层(layer)的容器,一个场景可以包含任意多个层,比如背景图的层,天空云朵的层,地图上的层,障碍物的层,玩家所行走的层。

        层类(layer)

        层是处理玩家事件响应的Node子类,层可以接受用户输入事件,包括触摸,键盘的输入。

        精灵类(sprite)

        精灵是游戏的一个元素,是一个显示给用户看的对象,精灵可以是玩家,可以是一座山,一条河。当然,这些对象都是图片资源。它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。

        总体来讲,导演类就是一个剧组的总导演命令者。场景就是场地,精灵就是演员、道具。层就规定那个演员的位置,只有同一层的对象才会产生事件,比如碰撞打斗之类的。

        场景,层都是虚拟的对象都是容器,是看不见的,只有精灵是看的见的。

        还有一个很重要的概念,Node节点。在Cocos2d-x-3.x引擎中,采用节点树形结构来管理游戏对象

        因为继承与node,所以精灵也可以是一个容器,比如玩家精灵身上携带的光环特效,之类的。只要绑在玩家身上,那么就会跟着玩家移动消失,等等。

在Cocos2dx中实现精灵显示的基本过程如下:

//创建Scene
auto scene = Scene::create();
//创建层
auto layer = HelloWorld::create();
//把层加入场景中
scene->addChild(layer);
//创建一个精灵
auto sprite = Sprite::create("HelloWorld.png");
//把精灵加到层里
layer->addChild(sprite, 0);




        如果还有不清楚的,可以翻阅官方文档,或者加群290912010,或者问本人,虽然我也是学习中,我也好多不会的。不过,有不会的才知道自己的不足。希望大家共同进步!

        这里献上官方api的地址:http://api.cocos.com/cn/df/d76/classcocos2d_1_1ui_1_1_edit_box.html#a6831b89d4902edf6d5e09af815809b56

    ps:可以继续喷了