[cocos2dx]cocos2dx主要概念

Cocos2dx 中的主要概念包括:应用、导演、场景、图层、精灵、动画、动作。层次关系如下:

CCDirector(导演)

在cocos2d-x引擎中,CCDirector类是整个游戏的组织和控制核心,游戏的运行规则,游戏内的CCScene(场景)、布景(CCLayer)、角色(CCSprite)等的运动,均由CCDirector管理,其在游戏中起着指定游戏规则让游戏内的场景、布景和任务有序的运行。在整个游戏里面,一般只有一个导演,游戏开始和结束时,都需要调用CCDirector的方法完成游戏初始化或销毁工作.在Cocos2d-x中是很重要的一个类,用于统筹管理,主要完成以下工作:

  • 初始化游戏和销毁游戏;
  • 管理调度场景;
  • 调整设置OpenGL信息;
  • 获取、设置游戏的相关细节;

使用方法:Director::getInstance()->MethodName

类CCDirector继承关系图

属性相关

//获得当前运行的场景,cocos2dx同时只能运行一个场景
Scene* getRunningScene();
//获取fps值
double getAnimationInterval();
//设置fps值
void setAnimationInterval(double dValue);
//fps是否是显示状态
bool isDisplayStats();
//设置是否显示fps
void setDisplayStats(bool bDisplayStats);
//获取每帧秒数
float getSecondsPerFrame();
//获取openGLView
GLView* getOpenGLView();
//设置openGLView
void setOpenGLView(GLView *pobOpenGLView);
//判断是否暂停
bool isPaused();
//获取调用到现在的所有帧数
unsigned int getTotalFrames();  

//判断被替换的场景是否接收到cleanup事件
//replace方式会,而push方式则不会
bool isSendCleanupToScene(void);

窗口相关

//返回以点为单位openGL视图的大小
const Size& getWinSize() const;
//返回以像素为单位openGL视图的大小
Size getWinSizeInPixels() const;
//返回以点为单位的 OpenGL 视图的可见大小.
Size getVisibleSize() const;
//返回以点为单位的 OpenGL 视图的初始化时的可见大小
Vec2 getVisibleOrigin() const;
//UIKit的坐标转换到一个OpenGL坐标 使用当前布局(横向或纵向)有效的(多)触摸坐标
Vec2 convertToGL(const Vec2& point);
//一个OpenGL坐标转换到UIKit的坐标 点组成的窗口调用有效的节点上面的点
Vec2 convertToUI(const Vec2& point);

场景管理相关

//根据给定的场景进入 Director的主循环 只能调用他运行你的第一个场景
void runWithScene(Scene *scene);
//暂停执行正在运行的场景中,pushing一个在堆栈上推暂停的场景。 新的场景将被执行.
void pushScene(Scene *scene);
//从队列中弹出一个场景。 这个场景将替换正在运行的场景.
void popScene();
//从队列中弹出所有的场景,直到只有根场景在队列中 这个场景将替换正在运行的场景.
void popToRootScene();
//弹出从队列中的所有场景,直到它到达 level.
void popToSceneStackLevel(int level);
//用一个新的替换正在运行的场景。终止正在运行的场景。 仅在有一个正在运行的场景的时候调用他.
void replaceScene(Scene *scene);
//结束执行,释放正在运行的场景。
void end();
//暂停正在运行的场景。
void pause(void);
//恢复暂停的场景 预定的定时器将被再次激活。 “推迟执行”的时间将是0(如果游戏没有暂停)
void resume();

CCCamera(摄像机)

每个节点都需要使用摄像机,当节点发生缩放,旋转,和位置变化时,都需要覆盖摄像机,让这个节点通过摄像机重新渲染。

CCScene(场景)

在游戏里,场景就是关卡。关卡由人物角色和背景构成。在电影里,场景就是电影中的各种场面,各种场面主要由人物活动和背景等构成。而在Cocos2d-x 引擎中,场景存放的是需要渲染的布景,任务角色和菜单,它可以作为一个整体,一起渲染,一起销毁,一起被场景切换使用。

即游戏关卡的实施者,其管理这多个CCLayer,进行场景展现,相关业务逻辑的处理等;

一个场景就是一个界面,定义了所显示的所有角色图层信息

Scene(场景)是一个抽象的概念,仅被用作Node(节点)的一个子类。Scene(场景)和Node(节点)几乎相同,不同的是Scene的默认锚点在屏幕的中心。现在 scene 没有其它的逻辑,不需要我们做太多的操作及处理,更多的操作处理基本都是在布景层上完成。

CCLayer(图层)

Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸、键盘输入等。我们需要在层中加入Sprite(精灵)、文本标签或者其它游戏元素,并设置游戏元素的属性,比如位置、方向和大小;设置游戏元素的动作等。在我们设计好层以后,只需要把层按照顺序添加到场景中就可以显示出来了。一个场景中有多个可以交互的图层,每层显示不同的角色信息

Layer层一方面作为容器使用,另一方面处理相关事件的响应(如触摸点击、用户输入等等…)。

类关系

父类:

  • Layer类是Node类的一个子类,它实现了触屏事件代理(TouchEventsDelegate)协议。

子类:

  • LayerColor是Layer的一个子类,它实现了RGBAProtocol协议。
  • LayerGradient是LayerColor的一个子类,它在背景上画渐变效果。LayerGradient它实现了LayerColor类的所有功能,还添加了以下这些新功能:渐变方向、渐变最终颜色、插值模式。
  • LayerMultiplex类是一个能够使它的子类进行复用的布景层类。

常用方法

//初始化函数
virtual bool init();  

//分配内存,默认创建一个全屏的黑色布景层
static Layer *create(void);  

//层进入回调
virtual void onEnter();
//层退出回调
virtual void onExit();
//如果层进入伴随转换效果,效果完成时回调
virtual void onEnterTransitionDidFinish();  

//触摸事件(单点)
virtual bool onTouchBegan(Touch *touch, Event *unused_event);
virtual void onTouchMoved(Touch *touch, Event *unused_event);
virtual void onTouchEnded(Touch *touch, Event *unused_event);
virtual void onTouchCancelled(Touch *touch, Event *unused_event);
//触摸事件(单点和多点)
virtual void onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event);
virtual void onTouchesMoved(const std::vector<Touch*>& touches, Event *unused_event);
virtual void onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event);
virtual void onTouchesCancelled(const std::vector<Touch*>&touches, Event *unused_event);

//注册触摸分发,默认是addStandardDelegate
virtual void registerWithTouchDispatcher(void);  

//判断触屏事件是否开启
bool isTouchEnabled();
//开启或关闭触屏事件
void setTouchEnabled(bool value);  

//设置/获取触摸模式
void setTouchMode(Touch::DispatchMode mode)
Touch::DispatchMode getTouchMode();

//触屏事件中的 swallowsTouches 事件。默认是true.
void setSwallowsTouches(bool swallowsTouches);
bool isSwallowsTouches() const;  

//设置/获取是否接收键盘事件
bool isKeypadEnabled();
void setKeypadEnabled(bool value);  

//返回键和菜单键的回调,需要设置接收键盘事件
void keyBackClicked(void);
void keyMenuClicked(void);

CCSprite(精灵)

角色(CCSprite) 精灵是整个游戏开发处理的主要对象,包括主角和敌人、NPC等,甚至随机飘过的一片云或飞鸟从技术上讲,也是精灵,因为精灵在cocos2d-x中,就是一个可以不断变化的图片,这些变化包括位置变化,旋转、放大缩小和运动等。

Sprite类继承关系

精灵实际上可以说就是游戏总的主角,游戏中我们可操作的人物、宠物等待。我们所看到的精灵本质上就是一个静态的二维图。在Cocos2d-x里面精灵是用Sprite类来进行表示的,它可以用一张图片或者一张图片的一块矩形部分来定义。

精灵创建

精灵提供了多个创建方式,具体如下

//创建一个无纹理Sprite,可以在创建后调用setTexture方法设置纹理。 更多...
static Sprite* create();

//指定图像文件名创建Sprite
static Sprite* create(const std::string& filename);

//指定图像文件名及Rect参数创建Sprite
static Sprite* create(const std::string& filename, const Rect& rect);

//指定Texture2D纹理对象创建Sprite
static Sprite* createWithTexture(Texture2D *texture);

//指定Texture2D纹理对象及Rect参数创建Sprite
static Sprite* createWithTexture(Texture2D *texture, const Rect& rect, bool rotated=false);

//指定Sprite帧(SpriteFrame)创建Sprite
static Sprite* createWithSpriteFrame(SpriteFrame *spriteFrame);

//指定Sprite帧名称创建Sprite
static Sprite* createWithSpriteFrameName(const std::string& spriteFrameName);

初始化相关

//对未初始化的空Sprite执行初始化操作
virtual bool init(void);  

//指定Texture2D纹理初始化Sprite,精灵大小即是纹理大小
virtual bool initWithTexture(CCTexture2D *pTexture);  

//指定Texture2D纹理对象及Rect参数初始化Sprite
virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect);  

//指定Texture2D纹理对象、Rect参数及是否旋转初始化Sprite
virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect, bool rotated);  

//指定SpriteFrame初始化Sprite,SpriteFrame中的纹理(texture)和Rect参数将被用于此Sprite
virtual bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame);  

//指定Sprite帧名称初始化Sprite
virtual bool initWithSpriteFrameName(const char *pszSpriteFrameName);  

//指定图像文件初始化Sprite
virtual bool initWithFile(const char *pszFilename);  

//指定图像文件名及Rect参数初始化Sprite
virtual bool initWithFile(const char *pszFilename, const CCRect& rect);

属性相关

//设置节点的缩放(x)
virtual void setScaleX(float fScaleX);
//设置节点的缩放(y)
virtual void setScaleY(float fScaleY);
//设置节点的缩放(x,y)
virtual void setScale (float scaleX, float scaleY);
//设置节点在它父节点坐标系中的位置
virtual void setPosition(const Vec2& pos);
virtual void setPosition(float x, float y);

//设置节点的旋转(angle)角度
virtual void setRotation(float rotation);
//设置节点X轴的旋转角度,表现为水平旋转倾斜
virtual void setRotationSkewX(float rotationX);
//设置Y轴节点的旋转角度,表现为垂直旋转倾斜
virtual void setRotationSkewY(float rotationY);
//改变该节点X轴的倾斜角,单位是度
virtual void setSkewX(float sx);
//改变该节点Y轴的倾斜角,单位是度
virtual void setSkewY(float sy);
//从容器中删除一个孩子,取决于cleanup参数同时会清除所有的活动的动作
virtual void removeChild(Node* child, bool cleanup);
//从容器中删除所有的孩子, 取决于cleanup参数同时会清除所有的活动的动作
virtual void removeAllChildrenWithCleanup(bool cleanup);
//对一个孩子重新排序,设定一个新的z轴的值
virtual void reorderChild(Node *child, int zOrder);
//在绘画之前,排列所有的孩子数组一次,而不是每次添加或者删除子节点时都排序。 这个方法可以大量地提高性能
virtual void sortAllChildren();
//添加一个子节点到容器中
virtual void addChild(Node *Child);
virtual void addChild(Node *child, int zOrder, int tag);
virtual void addChild(Node *Child, int zOrder, int tag);
//设置几点的缩放(x,y,z)
virtual void setScale(float fScale);
//设置位置的“z”轴坐标系,是OpneGL Z 定点值
virtual void setVertexZ(float fVertexZ);

CCAction(动作)

每个角色都可以通过CCAction实现运动、旋转、渐变等

时间: 2024-10-10 19:46:43

[cocos2dx]cocos2dx主要概念的相关文章

cocos2d-x一些核心概念截杀

Cocos2d-x中有很多概念,这些概念很多来源于动画.动漫和电影等行业,例如:导演.场景和层等概念,当然也有些有传统的游戏的概念.Cocos2d-x中核心概念:导演, 场景,层,节点,精灵,菜单动作,效果,粒子运动,地图,物理引擎. 下面我们介绍导演.场景.层.精灵.菜单概念以及对应的类,由于节点概念很重要我们会在下面详细介绍,而其他的概念将在后面介绍. 导演 导演类Director(v3.0之前是CCDirector)用于管理场景对象,采用单例设计模式,在整个工程中只有一个实例对象.由于是单

[Cocos2d-x]Cocos2d-x 3.2 学习笔记

获取屏幕大小(Visible) Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); 打印调试(CCLOG) CCLOG("Characters: %c %c", 'a', 65); CCLOG("Decimals: %d %ld", 1977, 650000L); C

我所理解的cocos2dx - cocos2dx架构一憋(下)

ui树及运行时游戏对象 node类是所有ui元素的基类,我们看看它有啥属性 1.位置和变换 position:位置,决定元素显示位置 anchorPoint:锚点,决定元素哪个部分处于这个位置上,这点范围(0-1, 0-1) 锚点示意图,假设元素在100,100,锚点为0.5,0.5,则图内中间的点处于100,100这位置 两个点决定元素在屏幕哪个位置.锚点影响元素的变换操作,例如旋转缩放等. 2.坐标系 世界坐标系:原点屏幕左下,向右x,向上y 本地坐标系:元素对于自身的坐标系,元素的左下角为

我所理解的cocos2dx - cocos2dx架构一憋(一)

cocos2dx引擎总览 游戏引擎是什么?最简单的游戏引擎本身就是一个渲染系统而已,它调用底层各类的api,来帮助开发者进行渲染.cocos2dx也是如此,它最主要的功能就是提供非常方便使用的渲染机制,并且是跨平台的,这对于开发者来说就十分的喜欢了. 除此以外,cocos2dx通过使用第三方库来支持许多游戏开发中需要用到的功能,例如文件解压,图片解析,网络支持,物理引擎,音频等功能,让开发者可以更专注于渲染引擎的开发.并且还封装了和平台无关的接口:文件加载,纹理解析,线程操作等. cocos2d

[cocos2dx]cocos2dx主要类

CCObject CCObject.h: #ifndef __CCOBJECT_H__ #define __CCOBJECT_H__ #include "platform/CCPlatformMacros.h" //Cocos2d命名空间 NS_CC_BEGIN //声明以下几种类,在后面会定义相应类的成员变量的指针.以下几个类均是CCObject类的派生类. class CCZone; //CCObject指针暂存类 class CCObject;//基类 class CCNode;

cocos2d-x 中的基本概念

在 cocos2d-x 开头配置(Windows 平台)中,介绍了新建工程,这篇就介绍下 cocos2d-x 的一些概念.(前提是需要有C++的面向对象的基本知识和C++11的常用知识) 层,场景,导演,精灵,菜单 打开新建的工程(不管是VS,XCODE, Eclipse对 cocos2d-x 都一样),在 Classes 下找到 AppDelegate.h  AppDelegate.cpp  HelloWorldScene.h  HelloWorldScene.cpp 暂时先不管 AppDel

Cocos2d-x中的基础概念

Cocos2d-x中的基础概念 尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=1926 在你阅读本章节之前你可能知道一些关于Cocos2d-x的知识,但是你可能想知道更多关于如何使用Cocos2d-x来制作出自己梦想的游戏. 没问题,让我们从现在开始. Cocos2d-x是一个跨平台的游戏引擎.什么是游戏引擎?现在不要被这个问题吓到! 一个游戏引擎就是一个可以提供大多游戏常用功能的软件作品.你之前也许听到过将它称之为API或者框架.但在本书中我们会使

Cocos2d-x 3.X手游开发实例详解

Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰然网创始人杨雍力荐) 于浩洋 著   ISBN 978-7-121-23998-4 2014年9月出版 定价:59.00元 356页 16开 编辑推荐 以Cocos2d-x V3.0为框架全面讲解手游开发的知识和方法 以热门游戏2048.卡牌为例,完整再现手游的开发过程 Cocos2d-x作者之一林

初学Cocos2dx

初学cocos2dx Cocos2dx 中的主要概念包括:应用.导演.场景.层.精灵.动画.动作. Cocos2dx里面的主要类 1.CCObject Object Object Object 是cocos2dx的主要基类.主要提供了引用计数的功能. 2.CCPoolManager CCPoolManager CCPoolManager CCPoolManager 是个单体类,负责管理多个垃圾回收器 CCAutoreleasePool 在CCObject::Autorelease方法中单体CCP