概述
层和场景是其他游戏元素的容器,如果没有向它们添加可见的游戏元素,它们看起来就一直是透明的。精灵则与层和场景不同,它隶属于层,是场景中出现的可见图形。
玩家控制的主角、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 高级开发教程》火烈鸟网络科技 编著
最后
以上就是现代棒球为你收集整理的CCSprite:精灵的全部内容,希望文章能够帮你解决CCSprite:精灵所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复