Cocos2dx <基础> 精灵
精灵是Cocos2dx 重要的对象,精灵是一个可以不断变化的图片。这些变化包括: 位置的变化, 旋转,放大,缩小等。
创建精灵的方式:
a. 使用图片创建精灵
static Sprite* create(const std::string& filename); --------->参数是图片的路径(默认是Rescrous)
精灵的大小是这个图片的大小.
auto visibleSize = Director::getInstance()->getVisibleSize();
//使用图片创建精灵
auto sprite = Sprite::create("Game/BluePlane.png");
sprite->setPosition(Vec2(visibleSize.width/2-200,visibleSize.height/2));
this->addChild(sprite);
b. 使用图片和精灵的矩形范围创建精灵
static Sprite* create(const std::string& filename, const Rect& rect);
//使用图片和矩形范围创建精灵
auto sprite2 = Sprite::create("Game/role.png",Rect(0,0,81.25,81.25));
sprite2->setPosition(Vec2(visibleSize.width / 2+200, visibleSize.height / 2));
this->addChild(sprite2);
注意: Rect(起点的x,起点的y,小图片的宽,小图片的高),以图片的右上角为原点计算的。
c. 使用2D纹理创建精灵
static Sprite* createWithTexture(Texture2D *texture);
//使用2D纹理创建精灵
auto texTure2d = TextureCache::getInstance()->addImage("Game/XPlane.png");
auto sprite3 = Sprite::createWithTexture(texTure2d);
sprite3->setPosition(Vec2(visibleSize.width / 2 + 400, visibleSize.height / 2));
this->addChild(sprite3);
d. 使用2D纹理和矩形范围创建精灵
static Sprite* createWithTexture(Texture2D *texture, const Rect& rect, bool rotated=false);
//使用2D纹理和矩形范围创建精灵
auto texTure2ds = TextureCache::getInstance()->addImage("Game/role.png");
auto sprite4 = Sprite::createWithTexture(texTure2ds,Rect(0, 0, 81.25, 81.25));
sprite4->setPosition(Vec2(visibleSize.width / 2 -400, visibleSize.height / 2));
this->addChild(sprite4);
----------------------------------------创建精灵帧的方式:
a. static SpriteFrame* createWithTexture(Texture2D* pobTexture, const Rect& rect);
b. static SpriteFrame* create(const std::string& filename, const Rect& rect, bool rotated, const Vec2& offset, const Size& originalSize);
c. static SpriteFrame* createWithTexture(Texture2D* pobTexture, const Rect& rect);
d. static SpriteFrame* createWithTexture(Texture2D* pobTexture, const Rect& rect, bool rotated, const Vec2& offset, const Size& originalSize);
参数: rotated: 是否旋转 ; offset: 偏移的位置 originalSize: 初始大小为一个指定的原始大小(可设为size:;zero)。
-----------------------------------------
e. 使用精灵帧创建纹理(精灵帧就是plist文件中的一个图片)
static Sprite* createWithSpriteFrame(SpriteFrame *spriteFrame);
auto spriteFrame = SpriteFrame::create("Game/role.png", Rect(0, 0, 81.25, 81.25),false,Vec2(0,0),Size(0,0));
auto sprite6 = Sprite::createWithSpriteFrame(spriteFrame);
sprite6->setPosition(Vec2(visibleSize.width / 2 - 200, visibleSize.height / 2 + 200));
this->addChild(sprite6);
f. 使用精灵帧名字创建精灵(游戏项目中经常用到的)
//使用精灵帧名字创建精灵 static Sprite* createWithSpriteFrameName(const std::string& spriteFrameName);
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Fei.plist");
auto sprite7 = Sprite::createWithSpriteFrameName("XPlane.png");
sprite7->setPosition(Vec2(visibleSize.width / 2 , visibleSize.height / 2 + 200));
this->addChild(sprite7);
--------------------------------------------------------------------------------------
<SpriteBatchNode>---->批量创建精灵
好处: 减少opengl指令,优化游戏性能。
Cocos2dx 使用openlgl es绘制图片,每次绘制图片的时候是open---draw---close流程。但是SpriteBatchNode把所有的精灵一起绘制,绘制的时候就是open----draw----draw----
close。
auto visibleSize = Director::getInstance()->getVisibleSize();
// static SpriteBatchNode* create(const std::string& fileImage, ssize_t capacity = DEFAULT_CAPACITY);
auto spriteNode = SpriteBatchNode::create("Game/Fei.pvr.ccz",10);//---->10代表的是这个Node容器中,有10个精灵
this->addChild(spriteNode);
//使用精灵帧名创建精灵
auto sprite1 = Sprite::createWithSpriteFrameName("BluePlane.png");
sprite1->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));
spriteNode->addChild(sprite1);
auto sprite2 = Sprite::createWithSpriteFrameName("XPlane.png");
sprite2->setPosition(Vec2(visibleSize.width /2-200, visibleSize.height / 2));
spriteNode->addChild(sprite2);
上一篇: 对象与实例的区别
下一篇: 指针与对象,指针与对象数组的联系与区别