CCSprite:精灵

来源:互联网 发布:汽车行业数据分析 编辑:程序博客网 时间:2024/04/28 06:52


层和场景是其他游戏元素的容器,如果没有向它们添加可见的游戏元素,它们看起来就一直是透明的。精灵则与层和场景不同,它隶属于层,是场景中出现的可见图形。

玩家控制的主角、AI控制的NPC、以及地图上的宝箱、宝石,甚至游戏主菜单的背景图片都是精灵。因此,可以这样认为,玩家看到的一切几乎都是由精灵构成。

精灵不一定是静态的。通常,一个精灵可以不断的变化,变化的方式包括:移动、旋转、缩放、变形、显现消失、动画效果等。精灵按照层次结构组合起来,并与玩家互动,构成一个完整的游戏。

CCSprite可以说是游戏中最重要的组成元素,是CCNode的一个最重要也最灵活的子类。说它重要是因为CCSprite代表了游戏中一个最小的可见单位,说它灵活则是由于其装载了一个纹理,具有丰富的表现力,而且可以通过多种方式加载。


纹理

可以认为纹理就是一张图片,这张图片被精灵显示出来。更深层的讲,纹理是3D游戏中绘制到物体表面上的图案。虽然cocos2d-x是平面游戏引擎,但是它仍然使用了3D绘图库OpenGL。这样一来,我们既可以利用图形加速器提高绘图效率,也可以在游戏中加入3D变换特效,实现更绚丽的效果。为了在3D环境中绘制平面图形,cocos2d-x只需在3D空间中垂直于视线的平面上绘制矩形,在矩形的表面使用纹理贴图即可。


创建精灵

  •  使用图片文件 
static CCSprite* create(const char *pszFileName);   //适用于要显示的是这张精灵的全部区域
static CCSprite* create(const char *pszFileName, const CCRect& rect);   //适用于要显示的是这张精灵的部分区域
 virtual bool initWithFile(const char *pszFilename);
 virtual bool initWithFile(const char *pszFilename, const CCRect& rect);
其中pszFileName为图片的文件名,直接传入图片文件相当于"Resource"文件夹的路径即可;
rect为可选参数,用于指定精灵显示纹理的部分,它是用前面介绍的纹理坐标系。
  • 使用CCTexture2D
 static CCSprite* createWithTexture(CCTexture2D *pTexture); //
 static CCSprite* createWithTexture(CCTexture2D *pTexture, const CCRect& rect);
 virtual bool initWithTexture(CCTexture2D *pTexture);
 virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect);
CCTexture2D类型的pTexture参数为纹理对象,可以使用CCTextureCache类的addImage方法把图片文件装载为纹理并返回。
  • 使用CCSpriteFrame创建
static CCSprite* createWithSpriteFrame(CCSpriteFrame *pSpriteFrame);
 static CCSprite* createWithSpriteFrameName(const char *pszSpriteFrameName);
 virtual bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame);
virtual bool initWithSpriteFrameName(const char *pszSpriteFrameName);
CCSpriteFrame类型的pSpriteFrame参数为纹理框帧,CCSpriteFrame保存了一个CCTexture2D的引用与一个CCRect来表示纹理中的部分。

关于创建精灵的几种方法可以看这篇文章

纹理相关的属性
CCSprite提供了一下与纹理相关的属性,用于获取或设置内容。
CCTexture2D *Texture: 获取或设置精灵所用的纹理。使用此方法设置纹理后,精灵将显示一个完整的纹理。
CCRect textureRect: 获取或设置纹理显示部分。此CCRect采用纹理坐标,即左上角为原点(0,0)。
CCSpriteBatchNode *BatchNode: 获取或设置精灵所属的批节点。

纹理相关方法
virtual void setDisplayFrame(CCSpriteFrame *pNewFrame): 设置显示中的纹理框帧
 virtual bool isFrameDisplayed(CCSpriteFrame *pFrame); 返回一个值,表示pFrame是不是正在显示中的纹理框帧。
 virtual CCSpriteFrame* displayFrame(void); 获取正在显示的纹理帧。


以上内容摘自《cocos2d-x 高级开发教程》火烈鸟网络科技 编著




0 0