上一节说布景层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. Eclipse SVN 安装步骤

    1.在eclipse中安装svn插件 Eclipse ---> Help ---> Install New Software ---> Add Name : 任意 Location ...

  2. Knockout学习笔记之一

    1.  四大关键理念: A. DeclarativeBindings(声明式绑定) Easily associate DOM elements with model data using a conc ...

  3. 加强型无穷集合:InfiniteList<T>,可指定遍历方向和偏移量,只要集合有元素并且偏移量不为 0,将永远遍历下去。

    主类: public class InfiniteList<T> : IEnumerable<T> { public List<T> SourceList { ge ...

  4. Java—常用数据类型

    1  Vector类 Vector类似于一个数组,但与数组相比在使用上有以下两个优点. (1) 使用的时候无需声明上限,随着元素的增加,Vector的长度会自动增加. (2) Vector提供额外的方 ...

  5. checkbox --jquery

    <input type="checkbox" value="2" class="ace ace-checkbox-2" id='ass ...

  6. Objective-C( Foundation框架 一 字符串)

    Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...

  7. ionic 安装遇到的问题以及解决方案

    公司里要用到 Ionic 做移动App 混合开发 一个环境搭建折腾了好几天.一是公司权限问题,二是网络问题,你懂得. Ionic 环境搭建官网有教程.本来几行命令就能搞定的事,一旦遇到网络问题,就蛋疼 ...

  8. Objective-C 与 C++ 的异同

    stackflow 上有同学提问"C++ 与 Objective-C 有什么异同?"楼下的提供的两个资料挺不错的. 其一是: Pierre Chatelier 写的 <Fro ...

  9. linux C++ 共享库导出类

    1.共享库的对外接口函数的声明必须加上extern “C”. 2.使用共享库对话接口函数生成的对象指针时在该对象未被释放之前不能关闭共享库句柄,否则会出现segmentation fault错误. 以 ...

  10. Android SurfaceView

    今天介绍一下SurfaceView的用法,SurfaceView一般与SurfaceHolder结合使用,SurfaceHolder用于向与之关联的SurfaceView上绘图,调用SurfaceVi ...