上一节说布景层CCLayer是小容器,那么精灵类CCSprite就是容器添加的内容,它是构成游戏的主要元素。精灵这个名称应该是游戏专用,它表示游戏中玩家操作的主角、敌人、NPC(Non Player Character-非玩家控制角色的缩写)、背景、道具和机关等。在Cocos2D-x中,CCSprite本质上就是一张二维的图片对象而已。CCSprite的继承关系图如下:

   从上图可知,CCSPrite也是CCNode的子类,不过它还支持纹理和色彩。看一看CCSprite的内部结构和功能。
 
   ·CCSprite属性:
     GLubyte m_nOpacity:不透明度
     ccColor3B m_sColor:颜色
     CCTextureAtlas* m_pobTextureAtlas:地图集
     unsigned int m_uAtlasIndex:图片集索引
     CCSpriteBatchNode*  m_pobBatchNode:精灵集
     bool m_bDirty:是否需要更新
     bool m_bRecursiveDirty:是否需要递归的更新
     bool m_bHasChildren:是否有子节点
     bool m_bShouldBeHidden:是否被隐藏
     CCAffineTransform m_transformToBatch:2D仿射变换
     ccBlendFunc m_sBlendFunc:是否混合方法
     CTexture2D* m_pobTexture:纹理
     CCRect m_obRect:矩形
     bool   m_bRectRotated:矩形是否旋转
     CCPoint m_obOffsetPosition:偏移位置
     CCPoint m_obUnflippedOffsetPositionFromCenter:从中心位置的非平移偏移
     ccV3F_C4B_T2F_Quad m_sQuad:集合三维顶点坐标、纹理和RGBA颜色的点
     ccColor3B m_sColorUnmodified:原始颜色
     bool m_bOpacityModifyRGB:是否不透明
     bool m_bFlipX:是否x轴翻转
     bool m_bFlipY:是否y轴翻转
 
   ·CCSprite方法:
     //初始化精灵
     bool initWithFile(const char *pszFilename):初始化精灵(通过图片地址)
     bool initWithFile(const char *pszFilename, const CCRect& rect):初始化精灵(通过图片地址和矩形)
     bool initWithSpriteFrameName(const char *pszSpriteFrameName):初始化精灵(通过精灵帧名称)
     bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame):初始化精灵(通过精灵帧)
     bool initWithTexture(CCTexture2D *pTexture):初始化精灵(通过纹理)
     bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect):初始化精灵(通过纹理和矩形)
     bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect, bool rotated):初始化精灵(通过纹理、矩形和旋转)
    
     //创建精灵
     static CCSprite* spriteWithFile(const char *pszFileName):创建精灵(通过图片)
     static CCSprite* spriteWithFile(const char *pszFileName, const CCRect& rect):创建精灵(通过图片和矩形)
     static CCSprite* spriteWithTexture(CCTexture2D *pTexture):创建精灵(通过纹理)
     static CCSprite* spriteWithTexture(CCTexture2D *pTexture, const CCRect& rect):创建精灵(通过纹理和矩形)
     static CCSprite* spriteWithSpriteFrame(CCSpriteFrame *pSpriteFrame):创建精灵(通过精灵帧)
     static CCSprite* spriteWithSpriteFrameName(const char *pszSpriteFrameName):创建精灵(通过精灵帧名称)
     static CCSprite* createWithTexture(CCTexture2D *pTexture):创建精灵(通过纹理)
     static CCSprite* createWithTexture(CCTexture2D *pTexture, const CCRect& rect):创建精灵(通过纹理和矩形)
     static CCSprite* createWithSpriteFrame(CCSpriteFrame *pSpriteFrame):创建精灵(通过精灵帧)
     static CCSprite* createWithSpriteFrameName(const char *pszSpriteFrameName):创建精灵(通过精灵帧名称)
     static CCSprite* create(const char *pszFileName):创建精灵(通过图片)
     static CCSprite* create(const char *pszFileName, const CCRect& rect):创建精灵(通过图片和矩形)
     static CCSprite* create():创建精灵
 
     void draw(void):绘制
     CCSpriteBatchNode* getSpriteBatchNode(void):获取精灵集
     void setTexture(CCTexture2D *texture):设置纹理
     void setDisplayFrameWithAnimationName(const char *animationName, int frameIndex):设置动画和帧索引
     void setBatchNode(CCSpriteBatchNode *pobSpriteBatchNode):设置精灵集

以上就是CCSprite主要的属性和方法。可以看出,有大量的创建和初始化方法用于获得CCSprite对象。这是因为CCSprite是游戏的主要元素,角色、NPC、道具、背景等都需要大量使用CCSprite对象。灵活的获取CCSprite对象方式,可以让Cocos2D-x引擎具有更好的兼容性。

在创建和初始化CCSprite方法中出现贴图类CCTexture2D。这个类是关于OpenGL的概念,在OpenGL中称图片为贴图,在Cocos2D-x中CCTexture2D就是图片对象的意思,可以通过它创建CCSprite对象。可以把它看成一个纹理,它是Cocos2D-x渲染图形的重要参数。

在CCSprite属性中有精灵批处理类CCSpriteBatchNode。这个类的作用是提高CCSprite的渲染效率。如果当有大量CCSprite对象需要渲染,逐个渲染效率会很低,通过使用CCSpriteBatchNode来批处理这些CCSprite对象,就可以做到一次渲染即可。它也可以作为如同CCLayerMultiplex的作用,用于管理多个CCSPrite。

在创建和初始化CCSprite方法中出现精灵帧类CCSpriteFrame。精灵帧的概念是相对于动画而产生的。一个精灵是固定的节点,它可以拥有许多精灵帧,在它们之间切换就形成动画效果。关于CCSpriteFrame在特性动画中还会详细讲解,这里只简单介绍一下。

-------------------------------------------------------------------------------------------------------------------

注:本人在本博客的原创文章采用创作共用版权协议http://creativecommons.org/licenses/by-nc-sa/2.5/cn/), 要求署名、非商业用途和保持一致。要求署名包含注明我的网名及文章来源(我的博客地址:http://www.cnblogs.com/binbingg)。

[原创]cocos2d-x研习录-第二阶 概念类之精灵类(CCSprite)的更多相关文章

  1. [原创]cocos2d-x研习录-第二阶 概念类之节点类(CCNode)

    节点类CCNode在基本概念中并不存在,它是为了建立基本概念之间的关联关系而抽象出来的中间辅助类.这个类在Cocos2D-x中极为重要,它为概念类之间搭建了一座宏伟的桥梁.它的继承关系图如下:     ...

  2. [原创]cocos2d-x研习录-第二阶 概念类之场景类(CCScene)

    场景类CCScene是Cocos2D-x在屏幕显示的内容,相当于游戏关卡或界面.CCDirector任何时候只能显示一个场景CCScene,游戏中可能存在若干场景,CCDirector通过场景切换达到 ...

  3. [原创]cocos2d-x研习录-第二阶 概念类之导演类(CCDirector)

    CCDirector类是游戏的组织和控制中心(总指挥),它控制着主屏幕的显示.场景的切换和显示,以及游戏的开始.结束和暂停.它的继承关系图如下:    CCDirector继承自基类CCObject, ...

  4. [原创]cocos2d-x研习录-第二阶 概念类之摄相机类(CCCamera)

    在Cocos2D-x中,每个CCNode都拥有一个摄像机类CCCamera.只有通过CCCamera,CCNode才会被渲染出来.当CCNode发生缩放.旋转和位置变化时,都需要覆盖CCCamera, ...

  5. [原创]cocos2d-x研习录-第二阶 概念类之布场层类(CCLayer)

    上面说场景CCScene相当于一个大容器,那么布景层类CCLayer就是大容器里的若干个小容器.每个游戏场景CCScene会有很多层CCLayer,每一层CCLayer负责各自的任务.看一下CCLay ...

  6. [原创]cocos2d-x研习录-第二阶 基本框架

    了解完Cocos2D-x的基本概念和概念类之后,是不是有一种蠢蠢欲动的冲动,想要探究Cocos2D-x是如何完成这一切的.接着我将通过对Cocos2D-x自代的HelloCpp项目进行分析,初步了解C ...

  7. [原创]cocos2d-x研习录-第二阶 基本概念

    在Cocos2D-x引擎中,有几个非常重要的概念:导演(CCDirector).摄像机(CCCamera).场景(CCSecen).布景(CCLayer).精灵(CCSPrite)和动作(CCActi ...

  8. [原创]cocos2d-x研习录—前言

    我认为很多开发者面对层出不穷的新技术.新思想和新理念,最为之苦恼的是找不到行之有效的学习方法,对于知识的本质缺乏认识,虽阅读了大量教材,却无法将其融入自己的知识体系,并搭建自己的知识树.不可否认,教材 ...

  9. [原创]cocos2d-x研习录-第三阶 特性之物理引擎

    游戏物理引擎是指在游戏中涉及物理现象的逻辑处理,它用于模拟现实世界的各种物理规律(如赛车碰撞.子弹飞行.物体掉落等),让玩家能够在游戏中有真实的体验. Cocos2D-x中支持Box2D和Chipmu ...

随机推荐

  1. Windows下安装postgresql_psycopg2时出现 "Unabled to find vcvarsall.bat" 的解决办法

    使用django时会用到postgresql的数据库,如下表: 数据库引擎设置 设置 数据库 适配器 postgresql PostgreSQL psycopg 版本 1.x, http://www. ...

  2. JQuery_过滤选择器

    一.基本过滤器 1.基本过滤器 过滤器主要通过特定的过滤规则来筛选所需的 DOM 元素,和 CSS 中的伪类的语法类似:使用冒号(:)开头. <script type="text/ja ...

  3. 数据库 基础篇3(mysql语法)

    4 数据库管理(接上篇) 4.1 查询所有数据库 mysql> show databases; +--------------------+ | Database           | +-- ...

  4. OneProxy的功能与限制

     数据库中间件的核心目的之一就是尽可能透明的线性扩展数据库能力.其主要功能介绍参考(http://www.onexsoft.com/zh/oneproxy.html). 但是透明只是相对的,下面就简要 ...

  5. DOM遍历方法

    为标题行添加样式 $(document).ready(function(){ $('th').parent().addClass('table-heading'); $('tr:not([th]):o ...

  6. 有关于psExec的使用

    psExec是微软pstools工具包中最常用的一个工具,也是在内网渗透中的免杀渗透利器. psExec能够在命令行下在对方没有开启telnet服务的时候返回一个半交互的命令行,像telnet客户端一 ...

  7. js格式化数字和金额

    格式化数字,格式化金额: function number_format(number, decimals, dec_point, thousands_sep) { /* * 参数说明: * numbe ...

  8. Google Analytics与百度统计原理

    Google Analytics与百度统计的统计数据都是有差异的,而且差异非常大,其根本原因在于数据统计的原理和机制是不同的.下面分享一下两位博友李鑫和赵高欣对Google Analytics与百度统 ...

  9. NGINX 定时器

    写在前面 写NGINX系列的随笔,一来总结学到的东西,二来记录下疑惑的地方,在接下来的学习过程中去解决疑惑. 也希望同样对NGINX感兴趣的朋友能够解答我的疑惑,或者共同探讨研究. 整个NGINX系列 ...

  10. AC自动机最好讲解

    http://www.cs.uku.fi/~kilpelai/BSA05/lectures/slides04.pdf