溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cocos2d-x學習筆記(二)序列幀動畫實現(xiàn)的幾種方法

發(fā)布時間:2020-07-25 14:21:14 來源:網(wǎng)絡 閱讀:3093 作者:wty530 欄目:游戲開發(fā)

一、cocos2d-x幫助文檔中關于動畫幀動畫的實現(xiàn)有兩種方法:

  • 手動添加序列幀到Animation類

  • 使用文件初始化Animation類

這里我就不列出來,大家可以看下官方文檔

http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/frame-animation/zh.md


二、有些時候我們需要從plist取出指定的幾個圖片(而不是全部)來播放動畫,接下來我們主要介紹下這種方法:


1、首先我們先通過使用SpriteFrameCache來創(chuàng)建精靈幀緩存

    

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("test.plist");


2、假設test.plist中有machine_1.pngmachine_2.png這兩個精靈圖片,通過createWithSpriteFrameName可以獲取精靈:


auto machine = Sprite::createWithSpriteFrameName("machine_1.png");

3、創(chuàng)建一個Vector類型的數(shù)據(jù)用來存放所需要的精靈幀,通過for循環(huán)添加動畫精靈


Vector<SpriteFrame*>frameVector;
for(inti=1;i<3;i++)
{
    char pngName[100] = {0};
    sprintf(pngName, "machine_%d.png",i);
    frameVector.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName(pngName));
}

4、設置動畫參數(shù)并播放序列幀動畫


//第二個參數(shù)是動畫執(zhí)行的持續(xù)時間
auto animation = Animation::createWithSpriteFrames(frameVector,0.2);
//設置動畫執(zhí)行完時是否回到原始狀態(tài)
animation->setRestoreOriginalFrame(false);
//設置動畫反復執(zhí)行的次數(shù)
animation->setLoops(10000);
//用動畫緩存初始化Animation實例,用Animate實例來播放序列幀動畫
auto action = Animate::create(animation);
machine->runAction(Sequence::create(action,action->reverse(), NULL));

5、完整的代碼如下:

    

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("test.plist");
//創(chuàng)建精靈machine
auto machine = Sprite::createWithSpriteFrameName("machine_1.png");
machine->setPosition(Vec2(visible.width/2,visible.height/2));
this->addChild(machine,1);
//創(chuàng)建一個Vector類型的數(shù)據(jù)用來存放所需要的精靈幀
Vector<SpriteFrame*> frameVector;
for( int i=1;i<3;i++)
{
char pngName[100] = {0};
sprintf(pngName, "machine_%d.png", i);
SpriteFrame* pngNameSF = SpriteFrameCache::getInstance()->getSpriteFrameByName(pngName);
frameVector.pushBack(pngNameSF);
}
//第二個參數(shù)是動畫執(zhí)行的持續(xù)時間
auto animation = Animation::createWithSpriteFrames(frameVector, 0.2);
//設置動畫執(zhí)行完時是否回到原始狀態(tài)
animation->setRestoreOriginalFrame(false);
//設置動畫反復執(zhí)行的次數(shù)
animation->setLoops(10000);
//用動畫緩存初始化Animation實例,用Animate實例來播放序列幀動畫
auto action = Animate::create(animation);
machine->runAction(Sequence::create(action, action->reverse(), NULL));


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI