本文主要展示了cocos2dx的動畫例項**,該例子在test的spritetest中。我將其單獨抽出來。
需要說明的是:因為cocos2d-x是通用遊戲引擎,為了保證相容性和易用性,對動畫機制作了最簡單的設計(被做成了乙個action)。但代價就是繪製動畫的**可能比較多,如果在實際開發中,一般都要選擇自己封裝。
這裡只給出最基本的動畫**,具體使用要根據實際情況自己封裝。最好自己開發乙個編輯器。額外說一句,開發編輯器最好使用qt,因為是跨平台的。
我們隨便找一張動畫資源,在66rpg裡有很多,如圖:
#1 動畫**
ccsize s = ccdirector::shareddirector()->getwinsize();//#1:生成動畫需要的資料類
cctexture2d *texture=cctexturecache::sharedtexturecache()->addimage("pic2476.png");
ccspriteframe *frame0=ccspriteframe::framewithtexture(texture,ccrectmake(32*0, 48*0, 32, 48));
ccspriteframe *frame1=ccspriteframe::framewithtexture(texture,ccrectmake(32*1, 48*0, 32, 48));
ccspriteframe *frame2=ccspriteframe::framewithtexture(texture,ccrectmake(32*2, 48*0, 32, 48));
ccspriteframe *frame3=ccspriteframe::framewithtexture(texture,ccrectmake(32*3, 48*0, 32, 48));
ccmutablearray*animframes = new ccmutablearray(4);
animframes->addobject(frame0);
animframes->addobject(frame1);
animframes->addobject(frame2);
animframes->addobject(frame3);
ccanimation *animation = ccanimation::animationwithframes(animframes, 0.2f);
animframes->release();
//#2:初始化並設定sprite
ccsprite *sprite = ccsprite::spritewithspriteframe(frame0);//設定乙個初始frame
sprite->setposition( ccp( s.width/2, s.height/2) );
addchild(sprite);
//#3:使用animation生成乙個動畫動作animate
ccanimate *animate = ccanimate::actionwithanimation(animation, false);
注意,cocos2dx不支援使用clip的動畫,另外,clip動畫的開發成本很高,在智慧型手機這種大記憶體的平台是否適用(犧牲記憶體換開發速度麼?),值得商量。
繪製效果如圖:
#2 相關的類關係圖
簡單過程是,使用
cctexture2d
載入 ,用cctexture2d生成對應的ccspriteframe(對應的就是幀),將
ccspriteframe新增到
ccanimation生成動畫資料,用ccanimation生成ccanimate(就是最終的動畫動作),最後用ccsprite執行這個動作。
Cocos2d x學習筆記1
1.建立新的cocos2d x 3.0 專案 在命令列中輸入 cocos new helloworld 專案名稱 p com.ss.pku 包名字 l cpp 專案型別 d d cocos workspace 專案存放路徑 2.資料夾分析 resource 資料夾 存放資源檔案 include和so...
Cocos2d x學習筆記(7)
1 動作基本概念 ccactiong是動作類的基類,動作作用於ccnode,因此,任何乙個動作都需要ccnode物件來執行。ccaction作為乙個基類,其實質是乙個介面 抽象類 由它派生的實現類才是實際使用的動作。ccaction的絕大多數實現類都派生自ccfinitetimeaction,這個類...
Cocos2d x動作學習筆記
action類如其名,它可以改變node物件的屬性,action物件是隨著時間改變node的屬性。任何乙個以node為基類的物件都有可執行的動作物件。例如,你可以在乙個時間段內將sprite精靈從乙個位置移動到另乙個位置。每個動作都有by和to兩個狀態。為什麼呢?因為它們所執行的結果是不同的。by相...