上一节说布景层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. jQuery核心之 $

    参考jQuery官网API文档 $ 和 $() 的区别很重要: 1.$(document).ready() 和 $(document).load() 的 区别:     前者等到DOM准备好了之后就会 ...

  2. 查看本机的IP地址方法:

    查看本机的IP地址方法:对于XP系统:方法一:如果右下角系统托盘区有本地连接的小电脑,双击小电脑→支持,就可以看到本机IP地址.无线连接也是一样.方法二:开始→运行cmd /k ipconfig,IP ...

  3. Bootstrap结合BootstrapTable的使用,分为两种模试显示列表。 自适应表格

    引用的css: <link href="@Url.Content("~/Css/bootstrap.min.css")" rel="styles ...

  4. 0060 Linux SELinux 管理命令

    1. SELinux 的起源 SELinux 是一个面向政府和行业的产品,由 NSA.Network Associates.Tresys 以及其他组织设计和开发.尽管 NSA 将其作为一个补丁集引入, ...

  5. (36)老版和新版API调用

    ---------更新时间18:06 2016-09-18 星期日------- *前言   我用的是odoo8,但里面有相当多的api是以前版本,这时若我们自己开发的   插件采用新版本api,里面 ...

  6. css实现一段不够一行时居中显示,多于一行时两端对齐

    今天有遇到这个问题,不够一行要居中才好看,多于一行居中又很难看: 居中 两端对齐 一开始想用text-align-last:center; 可是这样结果是这样的: 单行的居中了 可是多行的最后一行也居 ...

  7. 第八章 企业项目开发--分布式缓存memcached

    注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存 ...

  8. jquery 常用基础方法

    1 jquery常用方法: 2 取得标签元素里面内容与修改: 3 1.text()方法: 4 $(document).ready(function(){ 5 //alert("文档加载完毕& ...

  9. BZOJ4046 [Cerc2014] Pork barre

    我们把边按权值从大到小依次加入图中 如果加到边权$V$,则当前的最小生成森林中边权$v\in[V, V']$(其中$V'$是任意值)形成的森林的边权和就是对于询问$[V, V']$的答案 由于点数不多 ...

  10. iOS开发UI篇—Button基础

    iOS开发UI篇—Button基础 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状 ...