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