上一节说布景层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. equals

    package abstractClasses; import java.time.LocalDate; /** * Created by xkfx on 2016/12/20. */ public ...

  2. TCP/IP协议学习(二) LWIP用户自定义配置文件解析

    LWIP协议支持用户配置,可以通过用户裁剪实现最优化配置,LWIP默认包含opts.h作为系统默认配置,不过通过添加lwipopts.h文件并包含在opts.h头文件之前就可以对lwip进行用户裁剪, ...

  3. unittest框架介绍

    1.test fixture(测试框架) 测试准备前要做的工作和测试执行完成后要做的工作,例如测试前需要把数据初始化,测试完成后需要把测试环境中需要关的东西都关掉.主要包括setUp()和tearDo ...

  4. 用Js+css3实现图片旋转,缩放,裁剪,滤镜

    还是前端图片的老话题,花了半天时间,东拼西凑,凑出个demo,优点在于代码少,核心代码就6行,目前刚做了旋转,缩放,裁剪,滤镜要js做,网络上也有现成的代码, 但是想做到自定义的滤镜咋办呢?这还要从底 ...

  5. CentOS6.8下部署Zabbix3.0

    Centos6.8下部署安装zabbix3.0: 环境要求 PHP >= 5.4  (CentOS6默认为5.3.3,需要更新) curl >= 7.20 (如需支持SMTP认证,需更新) ...

  6. 两种JS方法实现斐波那契数列

    第一种方法:递归 function fibonacci(n){ if (n==0){ return 0; }else if (n==1){ return 1; } return fibonacci(n ...

  7. HTML 标题<h1>-<h6>

    定义和用法 <h1> - <h6> 标签可定义标题.<h1> 定义最大的标题.<h6> 定义最小的标题. 由于 h 元素拥有确切的语义,因此请您慎重地选 ...

  8. Python高效编程的19个技巧

    初识Python语言,觉得python满足了我上学时候对编程语言的所有要求.python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了.高级语言,如果做 ...

  9. [转]c++类的构造函数详解

    c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初 ...

  10. 总结七条助你成为Linux高手的超棒忠告

    起初Linux对于我来说其实是很纠结的,因为很早以前就听说过.也曾见各种技术大牛使用过,但是一直觉得非常高深而没有去正式接触.两年前随着自己工作愈发的乏味,又看到了一篇叫做"虽然我是医生,但 ...