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

    1.查看  redo log 信息 1.1.desc v$log ZC: 不明白这是查看什么信息... 1.2. 查看redo log file SQL> select * from v$log ...

  2. easyui tree 折叠节点

    <ul id="jihuidian" class="easyui-tree" data-options="onBeforeLoad:functi ...

  3. 用sqlplus为oracle创建用户和表空间<转>

    用Oracle10g自带的企业管理器或PL/SQL图形化的方法创建表空间和用户以及分配权限是相对比较简单的,本文要介绍的是另一种方法,使用Oracle 9i所带的命令行工具:SQLPLUS来创建表空间 ...

  4. laravel 表单验证 正则匹配

    判断url地址 是否为正确格式 控制器中 $this -> validate($request,[ 'linkname' => 'required|max:6|min:2', 'url' ...

  5. 在内部架设NuGet服务器(转载)

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com 在公司内部有 ...

  6. 通过一行代码学习javascript

    [].forEach.call($$("*"), function (a){ a.style.outline = "1px solid #"+(~~(Math. ...

  7. 错误信息:System.Resources.MissingManifestResourceException: 未能找到任何适合于指定的区域或非特定区域性的资源。请确保在编译时已将“****.****.Resource.resources”正确嵌入或链接到程序集"****",或者确保所有需要的附属程序集都可加载并已进行了完全签名

    在网上搜索了N久都没看到几篇解决的文章,最后在不懈的努力下终于解决了,所以决定写下解决方法方便以后遇到同样问题的朋友: 其实这个错误的主要问题就是没有找到需要的资源文件(该文件为Resources.r ...

  8. HTML5 WebSocket 实时推送信息测试demo

    测试一下HTML5的websocket功能,实现了客户端→服务器实时推送信息到客户端,包括推送图片: websocket实现MessageInbound类 onTextMessage()/onBina ...

  9. C语言基础--循环 递归打印乘法表

    for循环打印乘法表: #include <stdio.h> // for循环打印乘法表 int main(int argc, const char * argv[]) { //矩形 ; ...

  10. 递归问题==优化 还有数据库sqlreader

    reader尽量不要用获取列名方式 用索引比较好.   int i= reader.GetOrdinal("<#=c.ColumnName#>");  reader[i ...