CCSprite是cocos2d中使用最多的類了。一般使用一張圖片來創建一個精靈,圖片會被加載到內存,會轉換爲紋理圖CCTexture,從而在屏幕上顯示出來。
圖片介紹:
精靈的創建:
利用圖片創建一個精靈:
//利用文件名創建一個精靈
auto mole = Sprite::create("btn_icon.png");
//設置精靈的位置
mole->setPosition(size.width/2,size.height/2);
//把精靈添加的當前場景
this->addChild(mole);
利用圖片和矩形創建一個精靈:
//創建一個矩形
auto rect = Rect(2, 2, 51, 109);
//利用矩形和一個圖片創建一個精靈,就是在一張大圖中,摳出矩形的那一塊,創建一個精靈
auto mole = Sprite::create("grossini-aliases.png", rect);
//設置精靈的位置
mole->setPosition(size.width/2,size.height/2);
//把精靈添加到當前場景
this->addChild(mole);
利用texture創建一個精靈:
//先創建一個texture,利用一圖片
auto texture = Director::getInstance()->getTextureCache()->addImage("btn_icon.png");
//然後,再利用texture創建一個精靈
auto mole = Sprite::createWithTexture(texture);
//設置精靈的位置
mole->setPosition(size.width/2,size.height/2);
//把精靈添加到當前場景
this->addChild(mole);
利用texture和矩形創建一個精靈:
//先創建一個texture,利用一圖片
auto texture = Director::getInstance()->getTextureCache()->addImage("grossini-aliases.png");
//創建一個矩形
auto rect = Rect(2, 2, 51, 109);
//然後,再利用texture創建一個精靈
auto mole = Sprite::createWithTexture(texture,rect);
//設置精靈的位置
mole->setPosition(size.width/2,size.height/2);
//把精靈添加到當前場景
this->addChild(mole);
SpriteBatchNode的使用:
void SpriteScene::initBatch()
{
//創建一個batchNode節點,因爲要在其它方法中使用,所以在頭文件中聲明爲了全局變量
//第一個參數是文件名,第二個參數表示一次性加載多少個
batch = SpriteBatchNode::create("btn_icon.png",50);
//把batch添加到當前場景
this->addChild(batch);
}
void SpriteScene::addMole(Point p)
{
//根據紋理來創建一個精靈,而這個紋理,是從batch中得到的
mole = Sprite::createWithTexture(batch->getTexture());
//設置位置
mole->setPosition(p);
//把精靈添加到當前場景
this->addChild(mole);
}
bool SpriteScene::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
//根據觸摸得到當前觸摸的點
Point p = touch->getLocationInView();
//調用了添加精靈的方法,但這裏,需要轉換一下座標
addMole(Director::getInstance()->convertToGL(p));
return false;
}
//這個方法要在初使化場景的時候調用。還有中間使用的size,是已經在全局聲明並提前初使化了的。
void SpriteScene::registerListener()
{
//先初使化一下batch
initBatch();
//創建一個listener
auto l = EventListenerTouchOneByOne::create();
//設置listener的回調方法
l->onTouchBegan = CC_CALLBACK_2(SpriteScene::onTouchBegan, this);
//註冊我們創建的listener到當前節點,用於監聽事件
_eventDispatcher->addEventListenerWithSceneGraphPriority(l, this);
}
通過精靈幀SpriteFrame創建精靈:
//創建一個矩形
auto rect = Rect(2, 2, 51, 109);
//創建一個精靈幀,第一個參數是文件名,第二個參數是個矩形
auto frame = SpriteFrame::create("grossini-aliases.png", rect);
//根據幀創建一個精靈
auto mole = Sprite::createWithSpriteFrame(frame);
//設置精靈的位置
mole->setPosition(size.width/2,size.height/2);
//把精靈添加到當前場景
this->addChild(mole);
使用Testure來的創建精靈幀,進而創建精靈:
//創建一個矩形
auto rect = Rect(2, 2, 51, 109);
//先創建一個texture,利用一圖片
auto texture = Director::getInstance()->getTextureCache()->addImage("grossini-aliases.png");
//創建一個精靈幀,通過texture,和一個矩形
auto frame = SpriteFrame::createWithTexture(texture, rect);
//根據幀創建一個精靈
auto mole = Sprite::createWithSpriteFrame(frame);
//設置精靈的位置
mole->setPosition(size.width/2,100);
//把精靈添加到當前場景
this->addChild(mole);
SpriteFrameCache介紹:
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("grossini-aliases.plist");
auto frame =SpriteFrameCache::getInstance()->getSpriteFrameByName("grossini_dance_02.png");
//根據幀創建一個精靈
auto mole = Sprite::createWithSpriteFrame(frame);
//設置精靈的位置
mole->setPosition(size.width/2,100);
//把精靈添加到當前場景
this->addChild(mole);