CCSprite-精灵对象的创建方法有以下几种:
第一种方法比较直接,直接用CCSprite::create方法:
CCSprite* sp1 = CCSprite::create("Icon.png");
sp1->setPosition(ccp(winSize.width*0.2, winSize.height*0.2));
sp1->autorelease();
第二种方法是在第一种方法上加一个大小限制:
CCSprite* sp4 = CCSprite::create("Icon.png", CCRect(0, 0, 30, 30));
sp4->setPosition(ccp(winSize.width * 0.6, winSize.height * 0.2));
this->addChild(sp4, 2);
CCRect(0, 0, 30, 30)就是限制了精灵的大小,在位置(0,0)大小为(30,30)
第三种方法是用纹理绘制的:
CCTexture2D* tt2d = CCTextureCache::sharedTextureCache()->addImage("Icon.png");
CCSprite* sp2 = CCSprite::createWithTexture(tt2d);
sp2->setPosition(ccp(winSize.width * 0.4, winSize.height * 0.2));
this->addChild(sp2, 2);</span>
tt2d就是一个2D纹理,然后调用CCSprite::createWithTexture方法就可以创建一个精灵
第四种方法是精灵批处理类CCSpriteBatchNode进行创建,如果要对一个精灵进行多次使用的可以使用这种方法,只进行一次准备、一次渲染、一次清理:
CCSpriteBatchNode* bn1 = CCSpriteBatchNode::create("Icon.png", 50);
this->addChild(bn1, 3, 2);
CCSprite* sp_n1 = CCSprite::createWithTexture(bn1->getTexture(), CCRect(15, 23, 25, 25));
sp_n1->setPosition(ccp(winSize.width * 0.2, winSize.height * 0.8));
bn1->addChild(sp_n1,1,1);
CCSprite* sp_n2 = CCSprite::createWithTexture(bn1->getTexture(), CCRect(15, 24, 25, 25));
sp_n2->setPosition(ccp(winSize.width * 0.4, winSize.height * 0.8));
bn1->addChild(sp_n2,1,2);
CCSpriteBatchNode::create("Icon.png", 50); 第1个参数是贴图路径,第2个参数是使用次数
在调用精灵集合中的某一个精灵时可以这样调用,其中tag_id是这个精灵在精灵集合里的编号(tag):
void HelloWorld::zorderF1(CCSpriteBatchNode* b1, int tag_id)
{
CCSprite* sp = (CCSprite*)b1->getChildByTag(tag_id);
sp->setSkewX(20.0f);
}
其他的就类似第三种方法了
第五种方法使用缓存帧,就是把所用到的数据保存在.plist文件里,用的时候把整个文件加载进来:
CCSpriteFrameCache* ca = CCSpriteFrameCache::sharedSpriteFrameCache();
ca->addSpriteFramesWithFile("grossini.plist");
CCSprite* sp_ca1 = CCSprite::createWithSpriteFrameName("grossini_dance_01.png");
sp_ca1->setPosition(ccp(winSize.width * 0.6, winSize.height * 0.4));
char ss[100] = {0};
sprintf(ss, "grossini_dance_%02d.png", 1);
CCSpriteFrame* sf = ca->spriteFrameByName(ss);
sp_ca1->setDisplayFrame(sf);
this->addChild(sp_ca1);
我也是刚刚学习cocos2d-x,还是新手,还请看到这篇的大牛批评指正。