重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30475395

Sprite 
Sprite 能够说是游戏中最重要的组成元素;
它描写叙述了游戏中的精灵。是 Node 的一个最重要也最灵活的子类。
Sprite 非常重要。它代表了游戏中一个最小的可见单位。
同一时候Sprite 也非常灵活。它装载了一个平面纹理。具有丰富的表现力,并且 能够通过多种方式载入。
假设说 Scene 和 Layer 代表了宏观的游戏元素管理,那么 Sprite 则为微观世界提供了丰富灵活的细节表现。


纹理
纹理就是一张图片。这张图片被精灵显示出来。纹理是3D游戏中绘制到物体表面上的图案;
Cocos2d-x使用了 3D 画图库 OpenGL。
这样一来,我们既能够利用图形加速器提高画图效率,也能够在游戏中增加 3D 变换特效,实现更绚丽的效果。
为了在 3D 环境中绘制平面图形,Cocos2d-x 仅仅需在 3D 空间中垂直于视线的平面上绘制矩形,在矩形的表面使用纹理贴图就可以。

创建小天使
游戏开发应用中,精灵是由一个纹理创建的;假设不正确精灵做不论什么设置。精灵就是显示在屏幕上的一张图片。

通常精灵被置于层中,因此我们首选在层的初始化方法中创建精灵。设置属性。并加入到层中。
最经常使用的创建精灵的方式 是:使用一个图片文件通过使用 Sprite 的工厂方法 create 来创建精灵;
auto bg= Sprite::create("bg.png");
这个工厂方法包括一个std::string字符串參数,表示精灵所用纹理的文件名称。

Sprite 会自己主动把图片作为纹理加载到游戏中,然后使用纹理初始化精灵。

精灵不但能够显示一个完整的纹理,也能够仅显示纹理的一部分。
通过Sprite* Sprite::create(const std::string& filename, const Rect& rect)就能够达到目的。

以下的代码使用两个參数的 create 工厂方法创建了一个精灵:
这个精灵使用"bg.png"作为纹理,可是仅显示纹理左上角 100×100 像素大小的部分:
auto bg2= CCSprite::create("bg.png", Rect(0, 0, 100, 100));
第一个參数是所使用纹理的文件名称。第二个參数是一个Rect 类型的结构体,表示纹理中显示出来的矩形部分。
Rect(x,y,width,height)用来方便地创建一个矩形。
须要注意的是,纹理的坐标系中原点(0,0)位于左上角,原点向右是 x 轴的正方向。原点向下是 y 轴的正方向。

坐标系统以后再具体描写叙述;

给小天使穿衣服
创建了精灵后。我们还须要把精灵安排在合适的位置,否则引擎也不能决定精灵将怎样呈现出来。
诸如精灵的位置、方向、缩放比例等參数都是精灵的属性,我们在层中加入精灵之前,须要对它们进行恰当地设置。
以下的代码首先获取屏幕大小。然后依据屏幕大小把精灵置于屏幕中央:
Size size = Director::getInstance()->getWinSize();
Point pos = Point(size.width / 2, size.height / 2);
bg->setPosition(pos);
我们能够看到。在这段代码中我们改动了精灵的 Position 属性。

Position 属性是一个 Point 类型的结构体。表示精灵在 层中的位置,它是精灵相对于层的坐标。

把精灵的位 置坐标设置为屏幕长宽的一半。就能够使精灵位于屏幕中央了。


精灵具有十分丰富的属性,我们能够利用这些属性让精灵灵活地呈现出来。
但实际上。这些属性不不过精灵才拥有的,同一时候也属于Node。

Sprite 继承自 CCNode。因而也继承了它的所有属性。


天使来到了人间
社置完精灵的属性后,就该把精灵加入到层中了。

实际上 Sprite 与 Layer 都继承自 CCNode,向一个游戏元素中加入其他游戏元素的 addChild 是 Node 包括的方法。因此我们全然能够如同向场景中加入层一样,把精灵加入到层中;
this->addChild(bg);

其它经常使用成员
Sprite 还拥有下面经常使用的成员:
1、初始化方法
CCSprite 拥有很多种不同的初始化方法,能够方便地创建精灵。

使用这些方法。我们不仅能够通过图片文件来创建精灵,还能够直接使用纹理或精灵框帧来创建精灵。

a、使用图片文件
static Sprite* create(const std::string& filename);
static Sprite* create(const std::string& filename, const Rect& rect);
当中 filename为图片的文件名称,直接传入图片文件相对于"Resource"目录的路径就可以;
rect 为可选參数,用于指定精灵显示纹理的部分。它使用前面介绍的纹理坐标系。

b、使用 Texture2D
static Sprite* createWithTexture(Texture2D *texture);
static Sprite* createWithTexture(Texture2D *texture, const Rect& rect, bool rotated=false);
Texture2D 类型的 texture參数为纹理对象,能够使用 TextureCache 类的 addImage 方法把图片文件装载为纹理并返回。而
rect 与使用图片文件创建精灵的 rect 參数同样。
c、使用 SpriteFrame 创建
static Sprite* createWithSpriteFrame(SpriteFrame *spriteFrame);
static Sprite* createWithSpriteFrameName(const std::string& spriteFrameName);
SpriteFrame 类型的 spriteFrame參数为纹理框帧。SpriteFrame 保存了一个 Texture2D 的引用与一个 Rect 来表
示纹理中的一部分。使用 SpriteFrame 初始化精灵时,也可使精灵显示部分纹理。

2、纹理相关的属性
Sprite 提供了下面与纹理相关的属性,用于获取或设置精灵内容。

Texture2D* _texture:获取或设置精灵所用的纹理。

使用此方法设置纹理后,精灵将会显示一个完整的纹理。

Rect _rect:获取或设置纹理显示部分。此 Rect 採用纹理坐标。即左上角为原点。
SpriteBatchNode* _batchNode:获取或设置精灵所属的批节点。


3、纹理相关的方法
Sprite 提供了下面与纹理相关的方法。
virtual void setSpriteFrame(SpriteFrame* newFrame):设置显示中的纹理框帧,
当中 newFrame为新的纹理框帧,其代表的纹理或纹理的显示部分都能够与旧的框帧不同。 
virtual SpriteFrame* getSpriteFrame() const:获取正在显示的纹理框帧。
virtual bool isFrameDisplayed(SpriteFrame *pFrame) const:返回一个值。表示pFrame是否是正在显示中的纹理框帧。

4、颜色相关的属性
Sprite 提供了下面与颜色相关的属性:
Color3B color:获取或设置叠加在精灵上的颜色。Color3B 由三个颜色分量(红色、绿色和蓝色分量)组成。默觉得纯白色,表示不改变精灵的颜色,假设设置为其它值。则会改变精灵的颜色。
GLubyte Opacity:获取或设置精灵的不透明度。GLubyte 为 OpenGL 的内置类型,表示一个无符号 8 位整数,取值范围从最小值 0
到最大值 255。

bool isOpacityModifyRGB:获取或设置精灵所使用的纹理数据是否已经预乘 Alpha 通道。当包括 Alpha 通道的图片显示错误时,能够尝试改动这个属性。

郝萌主友情提示:
守护精灵,守护属于你的天使、、、

15、Cocos2dx 3.0游戏开发找小三之Sprite:每一个精灵都是上辈子折翼的天使的更多相关文章

  1. 22、Cocos2dx 3.0游戏开发找小三之音乐与音效:假如世界上没有了音乐,你的耳朵会孤单吗?

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30485103 假如世界上没有了音乐,在森林里.我们听 ...

  2. 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  3. 13、Cocos2dx 3.0游戏开发找小三之3.0中的Director :郝萌主,一统江湖

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706967 游戏中的基本元素 在曾经文章中.我们具 ...

  4. 1、Cocos2dx 3.0游戏开发找小三之前言篇

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  5. 3、Cocos2dx 3.0游戏开发找小三之搭建开发环境

    尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27107295 搭建开发环境 使用 Cocos2d- ...

  6. 12、Cocos2dx 3.0游戏开发找小三之3.0中的生命周期分析

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706303 生命周期分析 在前面文章中我们执行了第 ...

  7. 23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30485919 春雨惊春清谷天,夏满芒夏暑相连, 秋处 ...

  8. 19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478985 流动的水没有形状.漂流的风找不到踪迹. ...

  9. 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...

随机推荐

  1. qsort 函数用法

    用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 各参数: 1 待排 ...

  2. 极简主义,对逻辑操作符||和&&深度运用的理解

    丧心病狂的代码压缩好像违背了愉快阅读的本真,所以刨根问底想要了解个究竟,最后发现这不只是前端大牛装逼卖萌的绝技,也是代码洁癖爱好者的利器,毕竟这样看上去确实蛮优雅的; 一开始,我们接触到的代码是这样的 ...

  3. Ajax基础--JavaScript实现

    ajax原理 1.ajax 即“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),也就是无刷新数据读取. 通俗地讲就是:AJAX 通过在后台与 ...

  4. css学习--inline-block详解及dispaly:inline inline-block block 三者区别精要概括

    *知识储备: 内联元素:是不可以控制宽和高.margin等:并且在同一行显示,不换行. 块级元素:是可以控制宽和高.margin等,并且会换行. 1.inline-block 详解 (1)一句话就是在 ...

  5. js获取当前时间戳与日期比较

    如何用javascript获取当前时间戳: 复制代码 代码示例: 方法1: var timestamp = date.parse(new date()); 结果:1280977330000 方法2: ...

  6. php笔记之GD库图片创建/简单验证码

    燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...

  7. 小记搭建WAPM运行ThinkPHP时所需要的配置

    最近因为项目而接触到了Thinkphp,正在上手中.但昨天遇到几个问题,一下子牵连出之前搭建WAPM(windows+apache+PHP+MySQL)遗留的配置问题. aphache\conf目录下 ...

  8. PHP面向对象(OOP):把对象串行化serialize()方法,__sleep()方法,__wakeup()方法

    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...

  9. HTML部分标签的含义(2)

    1,ul标签,添加新闻信息列表 使用ul标签,信息无先后顺序 这些列表就可以用ul-li标签来完成 语法:<ul> <li>信息</li> <li>信息 ...

  10. %s的用法

    %s 正常输出字符串printf("%s\n", "abcd"); //normal output abcd %8s 最少输出8位长度的字符串,不够在字符串左侧 ...