热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Cocos2d-x学习笔记(5)

Cocos2d-x基本元素介绍:1、CCDirector:大总管这是控制游戏流程的主要组件,包括设定游戏呈现窗口、FPS显示、默认帧率上限、纹理颜色位宽等切换当前游戏场景、暂停或恢复场景运行。通过CCDirector*pDirectorCCDirector::sharedDirector();访问场

Cocos2d-x基本元素介绍: 1、CCDirector:大总管 这是控制游戏流程的主要组件,包括设定游戏呈现窗口、FPS显示、默认帧率上限、纹理颜色位宽等切换当前游戏场景、暂停或恢复场景运行。通过CCDirector* pDirector = CCDirector::sharedDirector();访问场

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:层

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()后被调用。

推荐阅读
  • 处理docker容器时间和宿主机时间不一致问题的方法
    本文介绍了处理docker容器时间和宿主机时间不一致问题的方法,包括复制主机的localtime到容器、处理报错情况以及重启容器的步骤。通过这些方法,可以解决docker容器时间和宿主机时间不一致的问题。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了Java的公式汇总及相关知识,包括定义变量的语法格式、类型转换公式、三元表达式、定义新的实例的格式、引用类型的方法以及数组静态初始化等内容。希望对读者有一定的参考价值。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • C++语言入门:数组的基本知识和应用领域
    本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了Cocos2dx学习笔记中的更新函数scheduleUpdate、进度计时器CCProgressTo和滚动视图CCScrollView的用法。详细介绍了scheduleUpdate函数的作用和使用方法,以及schedule函数的区别。同时,还提供了相关的代码示例。 ... [详细]
author-avatar
steveukuk
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有