一.Sprite的概念
Sprite,即精灵。在Cocos2d-x官网上,Sprite是这样定义的:
Cocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。主要的类关系如下: 简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。
官网给出的解释很多,很复杂,也很官方,看完可能同学们会感到有点晕,这里我给大家说一下我对于精灵的理解:所谓精灵,其实就是一个四边形,这个四边形可以加载显示单图片和序列帧图片。同时它的四个顶点的位置,色彩,透明度等信息可以被我们控制和改变。精灵,是我们对于图型图像进行控制的基础操作物体。
看了我的总结是不是有点明白sprite是个什么东东了呢。如果还是不明白也没关系,慢慢体会你就会明白了,跟着我们课程的节奏走,就能带你超神!。
二.Sprite的创建
//通过直接创建的方式创建sprite auto sprite = Sprite::create("logo.png"); //添加到Layer上 addChild(sprite); //设置sprite的坐标 sprite->setPosition(Vec2(200,320)); //通过贴图创建sprite auto sprite1 = Sprite::createWithTexture(TextureCache::getInstance()->addImage("logo.png")); //添加到layer上 addChild(sprite1); //设置坐标 sprite1->setPosition(Vec2(480,320)); //通过spriteFrame创建sprite //创建精灵帧 auto spriteframe = SpriteFrame::createWithTexture(TextureCache::getInstance()->addImage("logo.png"),Rect(0,256,162)); //创建sprite auto sprite2 = Sprite::createWithSpriteFrame(spriteframe); //添加到Layer上 addChild(sprite2); //设置坐标 sprite2->setPosition(Vec2(480,320));
从代码中我们可以看出这三种创建方式的使用。
第一种方法:就是直接调用Sprite的create 方法,这是我们最常用的一种精灵创建所使用的方法,也是最容易使用的精灵创建方法,它只需要填写图片文件名称,内部进行了加载图片产生纹理的处理。
第二种方法:通过纹理管理器加载一个图片产生纹理,并使用这个纹理来创建Sprite。这么做有什么用呢?有一个用处是在实际项目开发中,我们往往会使用TextureCache的addImageAsync 的方法去异步加载游戏中使用到的大部分的纹理,当我需要创建Sprite的时候直接从这个纹理缓存中取得就可以了。(注意:使用异步加载纹理,是为了让我们的游戏流畅的运行而不会被图片加载造成停顿。)
第三种方法:通过SpriteFrame来创建Sprite,这种主要是我们创建animation动画的时候,会把动画的纹理加载的SpriteFrameCache中,然后播放动画的时候需要一个sprite来作为执行对象来使用,而创建该sprite的时候我们就直接从这个动画的中取得spriteFrame,来创建这个sprite。
三.Sprite的属性设置
Sprite有很多属性可以用来根据我们的需要进行调整,通过源码我可以出到Sprite的都有哪些属性可以供我们来设置,使用。下面我们通过代码来看一下我们经常用到的sprite的属性,如下:
//通过直接创建的方式创建sprite auto sprite = Sprite::create("logo.png"); //添加到Layer上 addChild(sprite); //设置sprite的坐标 sprite->setPosition(Vec2(200,320)); //改变sprite的大小 sprite->setScale(0.5,2.0); //改变透明度 sprite->setOpacity(128); //改变角度 sprite->setRotation(60); //设置是否可见 sprite->setVisible(true);
上面代码我们列出来了一些常用的Sprite的属性设置,通过注释相信大家能看明白一些,这些都是经常使用到的Sprite的属性,我们一定要熟练掌握,建议大家多去尝试写一下上面的代码,看看Sprite执行这些操作之后的效果是什么样子,加深我们的记忆。
后面我们会讲到Cocos2d-x的Action,其实到时候我们发现Cocos2d-x的Action大多数都是通过改变执行对象本身的属性来实现的,学好Sprite的属性设置才能更好的理解Action的原理。