欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Cocos2dx <基础> 精灵

程序员文章站 2024-03-25 20:22:04
...

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

    Cocos2dx <基础> 精灵

	//使用图片和矩形范围创建精灵
	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);
Cocos2dx <基础> 精灵

--------------------------------------------------------------------------------------

<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);




相关标签: Cocos2dx 游戏