精灵是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);