Cocos2d-x基本元素介绍:

1、CCDirector:大总管

这是控制游戏流程的主要组件,包含设定游戏呈现窗体、FPS显示、默认帧率上限、纹理颜色位宽等切换当前游戏场景、暂停或恢复场景执行。通过CCDirector* pDirector = CCDirector::sharedDirector();訪问场景。

(1)runWithScene(CCScene* scene):启动游戏,并执行scene场景,这种方法主要用在主程序启动时第一次启动主场景时调用。

(2)replaceScene(CCScene* scene):直接使用传入的scene替换当前场景来切换画面,当前场景被释放。

(3)pushScene(CCScene *scene):将当前执行的scene暂停并压入到代执行场景栈中,再将传入的scene设置为当前执行场景。

(4)popScene:释放当前场景,再从代执行场景栈中弹出栈顶的场景,并将其设置为当前执行场景,假设栈为空,直接结束应用。

(5)pause:暂停当前执行场景中全部计时器和动作,场景仍然会在屏幕上。

(6)resume:恢复当前执行场景中被暂停的计时器和动作,与pause配合使用。

(7)end:结束场景,同一时候退出应用。

2、CCScene:场景

场景并没有特别功能,作为层的容器,流程控制。

3、CCLayer:层

层也扮演容器的角色,层包括的是直接呈如今屏幕上的详细内容,层中放入精灵、文本标签、其它元素;设置元素属性,如位置、大小、方向;设置元素动作,开发的大部分编码时间都用在创建层上。向场景中加入层使用addChild方法,有例如以下3种定义:

void addChild(CCNode* child);
void addChild(CCNode* child,int zOrder);
void addChild(CCNode* child,int zOrder,int tag);

child就是加入的节点,对于场景来说,节点就是层,假设想要指定先后顺序,能够使用不同的zOrder值,zOrder代表了该节点下元素的先后顺序,值越大显示顺序越靠上,其默认值为0。tag是元素的标识代码,假设子节点设置了tag值,则就能够在父节点中利用tag值找到它。CCLayer一个十分重要的内容就是能够接受用户输入事件,包含触摸、加速度计、键盘输入等。

4、CCSprite:精灵,继承自CCNode

(1)纹理:纹理就是一张图片,这张图片被精灵显示出来。Cocos2d-x使用了3D画图库OpenGL。

(2)创建精灵:精灵是由纹理创建的,首先在层的初始化方法中创建精灵,设置属性,加入到层。有多种方式能够创建精灵。我们使用工厂方法创建精灵:

CCSprite* fish = CCSprite::create(”fish.png“);//fish.png是精灵所用纹理的文件名称。精灵不但能够显示一个完整的纹理,也能够显示一部分,例如以下:

CCSprite* smallFish = CCSprite::create(”fish.png“,CCRectMake(0,0,100,100));//这行代码显示纹理左上角100*100像素大小的部分。

(3)设置精灵属性:精灵位置、方向、缩放比等參数都是精灵的属性。首先获取屏幕大小的代码入下:

CCSize size = CCDirector::sharedDirector()->getWinSize();//获取屏幕大小
CCPoint pos = cpp(size.width / 2,size.height / 2);//确定精灵位置
fish->setPosition(pos);//设置精灵位置

(4)向层中加入精灵

设置完精灵属性后,把精灵加入到层中,实际上CCSprite和CCLayer都继承自CCNode,向一个元素中加入其它游戏元素的addChild是CCNode包括的一个方法,因此,也能够使用addChild将精灵加入到层:this->addChild(fish);

(5)经常使用成员

一、初始化方法:

a、使用图片文件

static CCSprite* create(const char *pszFileName);
static CCSprite* create(const char *pszFileName,const CCRect& rect);
bool initWithFile(const char *pszFileName);
bool initWithFile(const char *pszFileName,const CCRect& rect);

rect为可选选项,用于指定精灵显示纹理的部分,使用之前类似于cpp的坐标系

b、使用CCTexture2D(贴图类)

static CCSprite* create(CCtexture2D *pTexture);
static CCSprite* create(CCtexture2D *pTexture,const CCRect& rect);
bool initWithTexture(CCtexture2D *pTexture);
bool initWithTexture(CCtexture2D *pTexture,const CCRect& rect);

CCTexture2D类型的pTexture參数为纹理对象,能够使用CCTextureCache类的addImage方法把图片文件装载为纹理并返回,rect与之前功能一样。

            c、使用CCSpriteFrame创建,创建方法例如以下:

static CCSprite* create(CCSpriteFrame *pSpriteFrame);
bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame);

pSpriteFrame參数为纹理框帧,它保存一个CCTexture2D的应用与一个CCRect来表示纹理的一部分。

二、纹理相关属性

CCTexture2D* Texture:获取或设置精灵所用的纹理,使用此法设置纹理后,精灵将会显示一个完整的纹理。

CCRect TextureRect:获取或设置纹理显示部分,此CCRect採用纹理坐标,即左上角为原点。

CCSpriteBatchNode* BatchNode:获取或设置精灵所属的批节点。

三、纹理相关的方法

void setDisplayFrame(CCSpriteFrame *pNewFrame):设置显示中的纹理框帧,当中pNewFrame为新的纹理框帧,其代表的纹理或纹理显示部分,能够与旧框帧不同

CCSpriteFrame* displayFrame:获取正在显示的纹理框帧。

bool isFrameDisplayed(CCSpriteFrame *pFrame):返回一个值,表示pFrame是不是正在显示中的纹理框帧。

四、颜色相关的属性

ccColor3 Color:获取或设置叠加在精灵上的颜色,ccColor3由3个颜色分量(红、绿、蓝)组成,默觉得纯白色,表示不改变精灵的颜色,假设设置为其它值,会改变。

GLubyte Opacity:获取或设置精灵的不透明度,GLubyte为OpenGL的内置类型,表示一个无符号8位整数,取值范围0~255

bool OpacityModifyRGB:获取或设置精灵所使用的的纹理数据是否已经预乘Alpha通道,包括Aloha通道的图片显示错误时,能够改动这个属性。

5、CCNode与坐标系

        Cocos2d-x採用场景、层、精灵的层次结构来组织游戏元素,这个层次结构还相应了游戏的渲染层次,因此游戏元素能够组织成树形结构,成为渲染树。Cocos2d-x把渲染树上的每个游戏元素抽象为一个节点,即CCNode,一切游戏元素都继承自CCNode,具有CCNode的全部特性。

CCNode定义了一个能够绘制对象的通用特性,包含位置、缩放、是否可见、旋转角度等。

       (1)Cocos2d-x中坐标系:存在两种坐标系

a、画图坐标系:採用与OpenGL同样的坐标系,左下角为原点,向右为x轴正方向,向上为y轴正方向,在Cococs2d-x中,一切画图相关的操作都使用画图坐标系,如Position和AnchorPoint等属性。

b、纹理坐标系:以左上角为原点,向右为x轴正方向,向下为y轴正方向,如:CCSprite的TextureRect属性。

(2)画图属性:

a、CCSize ContentSize:获取或设置此节点的内容大小,以便进行图形变换。

b、CCPoint AnchorPoint与CCPoint Position:AnchorPoint用于设置一个锚点,以便更精确的控制节点的位置和变换。AnchorPoint的两个參数x和y的取值在0到1之间的实数,表示锚点相对于节点长宽的位置。Position用于设置节点的位置,因为Position指的是锚点在父节点中的坐标值,节点显示的位置通常与锚点有关。

c、folat Rotation:获取或设置节点的旋转角度,节点以自己的锚点为中心顺时针旋转一定量,单位是角度,旋转角度能够是随意的。

d、float Scale(float ScaleX和float ScaleY):Scale用于获取或设置及诶单的缩放比例,节点以锚点为中心缩放该比例。Scale代表总体缩放比例,而ScaleX与ScaleY表示X与Y方向的缩放比例。默认情况下三种都是1。

e、bool Visible:获取或设置节点的可见性。当Visible为true时,节点显示。其訪问器特殊:

bool isVisible();//类似于get訪问器

void setVisible(bool visible);//类似于set訪问器

f、float SkewX与float SkewY:获取或设置斜切角度。节点以锚点为中心,平行X轴或y轴方向做一定角度的变形。SkewX为平行x轴顺时针的变形,SkewY为平行y轴逆时针的变形,单位为角度。默觉得0.

g、int Tag:获取或设置节点的标号,高速从节点的全部节点中找出所需节点,定位子节点,Tag不可同样。相关方法有:getChildByTag、removeChildByTag等

h、void UserData:获取或设置与节点相关的额外信息。利用void*属性保存不论什么数据。

其他属性:CCArray* Children、CCNode* Parent、CCCamera* Camera、CCGridBase* Grid、CCGLProgram* ShaderProgram、CCActionManager* ActionManager、CCScheduler* Scheduler等以后再介绍。

6、节点的组织:

组织节点相关的方法
方法 描写叙述
addChild(CCNode* child) 把child加入到当前节点之中
removeFromParentAndCleanup(bool cleanup) 把当前节点从其父节点移除,假设cleanup为true,则运行clean方法
removeChild(CCNode* child,bool cleanup) 从当前节点中移除child节点,假设cleanup为true,则调用child的clean方法
removeChildByTag(int tag,bool cleanup) 从当前节点中移除标号为tag的节点
removeAllChildWithCleanup(bool cleanup) 移除当前节点的全部子节点
getChildByTag(int tag) 返回当前节点中标号为tag的节点
cleanup 停止此节点的所有动作与计时器

7、定时器事件:定时器是一定时间间隔连续引发游戏时间的工具,定时器是游戏动态变化的工具。

(1)update定时器:机制是CCNode的刷新事件update方法,该方法在每帧绘制之前都会被触发一次。CCNode默认并没有启用update事件,须要调用scheduleUpdate方法,并重载update以运行自己的代码。使用unscheduleUptage方法停止定时器。

(2)schedule定时器:机制是CCNode提供的schedule方法,能够实现一定时间间隔连续调用某个函数,时间间隔必须大于2帧的间隔。

8、其它事件:Cocos2d-x还为我们提供了一些其它与流程控制相关的事件。

(1)onEnter:当此节点所在的场景即将呈现时,会调用此方法

(2)onEnterTransitionDidFinish():当此节点所在场景的入场动作结束后,会调用此方法,假设所在场景没有入场动作,则此方法会紧接着onEnter()后被调用

(3)onExit():当此节点所在场景即将退出时,会调用此方法

(4)onExitTransitionDidStart():当此节点所在场景的出场动作结束后,会调用此方法,假设所在场景没有出场动作,则此方法会紧接着onExit()后被调用。

Cocos2d-x学习笔记(5)的更多相关文章

  1. cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建

    一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...

  2. android cocos2d-x for Android安装和学习笔记(请用adt-bundle21.1或以上导入)

    引用:http://weimingtom.iteye.com/blog/1483566 (20121108)注意:这篇文章用cdt编译ndk工程的内容已过时(现在可以用adt-bundle,避免配置繁 ...

  3. [Cocos2d-x for WP8学习笔记] HelloWorld结构分析

    先来看一下目录结构: Assets:游戏资源文件,图片音频等,Resource文件夹也有类似功能 include:用于放置游戏头文件 Shaders:渲染器着色器文件(大雾) cocos2dorig. ...

  4. cocos2d-x实战 C++卷 学习笔记--第4章 字符串 __String类

    前言: <cocos2d-x实战C++卷>学习笔记.(cocos2d-x 是3.0版本) 介绍 cocos2d-x 通用的字符串类  __String . 使用cocos2d::__Str ...

  5. Cocos2d-x学习笔记(17)(TestCpp源代码分析-1)

    TestCpp源代码基于Cocos2d-x2.1.3版本号,部分资源来自红孩儿的游戏编程之路CSDN博客地址http://blog.csdn.net/honghaier/article/details ...

  6. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  7. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  8. cocos2d-html5学习笔记(六)--alpha2中cc.Sequence.create中的bug

    cocos2d-html5学习笔记(六)--alpha2中cc.Sequence.create中的bug http://blog.csdn.net/allenice1/article/details/ ...

  9. 【cocos2d-x 3.x 学习笔记】对象内存管理

    内存管理 内存管理一直是一个不易处理的问题.开发人员必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完成后有效地释放内存,即管理对象的生命周 ...

  10. ‎Cocos2d-x 学习笔记(20) ControlButton

    [Cocos2d-x 学习笔记 目录链接] 1. 简介 ControlButton实现了按钮功能,根据触摸的位置和移动的过程可识别9中EventType类型,执行对应的回调函数. 直接继承了Contr ...

随机推荐

  1. BZOJ 1965: [Ahoi2005]SHUFFLE 洗牌( 数论 )

    对于第x个数, 下一轮它会到位置p. 当x<=N/2, p = x*2 当x>N/2, p = x*2%(N+1) 所以p = x*2%(N+1) 设一开始的位置为t, 那么t*2M%(N ...

  2. CentOS 安装easy_install、pip的方法

    CentOS 安装easy_install的方法: wget -q http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py ...

  3. android 根据域名得到IP

    public static String GetInetAddress(String host) { String IPAddress = ""; InetAddress Retu ...

  4. Python函数式编程:内置函数reduce 使用说明

    一.概述 reduce操作是函数式编程中的重要技术之一,其作用是通过对一个集合的操作,可以从中生成一个值.比如最常见的求和,求最大值.最小值等都是reduce操作的典型例子.python通过内置red ...

  5. C++0x简讯

    关于C++0x核心进展的一组简讯 刘未鹏 /文 C++的罗浮宫(http://blog.csdn.net/pongba) Concepts无疑是C++0x的杀手级特性之中的一个(也许称它“杀手级”另一 ...

  6. 从C到C++,C语言与C++的关系

    C语言是1972年由美国贝尔实验室的D.M.Ritchie研制成功的.它不是为初学者设计的,而是为计算机专业人员设计的.大多数系统软件和许多应用软件都是用C语言编写的.但是随着软件规模的增大,用C语言 ...

  7. android wifi讲解 wifi列表显示

    1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这 ...

  8. [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收(转)

    我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是怎样在微信公众平台使用QQ表情, ...

  9. 物理Data Guard主备切换步骤

    物理Data Guard角色转换步骤   Step  1   验证主库是否能执行角色转换到备库(原主库执行) SQL> SELECT SWITCHOVER_STATUS FROM V$DATAB ...

  10. python进阶十_正則表達式(一)

    近期状态一直不太好,至于原因,怎么说呢,不好说,总之就是纠结中覆盖着纠结,心思全然不在点上,希望能够借助Python的学习以及博客的撰写来调整回来,有的时候回头想一想,假设真的是我自己的问题呢,曾经我 ...