cocos2d-x ios遊戲開發初認識(七) 簡單的動畫 – iPhone手機開發技術文章 iPhone軟體開發教學課程

前面有一節說瞭幀動畫,就是讓精靈改變自己的位置、形狀、大小來實現相應的動作,這講主要是要通過一些方法來實現精靈的移動,產生各種炫麗的動畫,也可能讓你找到一點遊戲場景。

下面具體根據代碼分析:

為瞭清晰最好將前幾節的代碼註釋掉。

//根據前面的知識先創建一個菜單

CCMenuItemFont *item =CCMenuItemFont::create(“開始遊戲”,this,
menu_selector(MainScene::onMenuItem));//點擊事件

//添加到菜單欄裡面

CCMenu *menu =
CCMenu::create(item,NULL);//可以傳多個

menu->setPosition(ccp(100,500));

this->addChild(menu);

//創建一個精靈

sprite =
CCSprite::create(“Icon-72.png”);

sprite->setPosition(ccp(300,300));

this->addChild(sprite);

運行:

在onMenuItem函數裡實現一些動畫:

//1.實現精靈的隱藏

vcD4KPHA+ICAgIENDSGlkZSAqaGlkZSA9Q0NIaWRlOjpjcmVhdGUoKTsgLy/S/rLYvqvB6TwvcD4KPHA+ICAgc3ByaXRlLT5ydW5BY3Rpb24oaGlkZSk7ICAgICAgICAgLy/Uy9DQtq+7rTwvcD4K1MvQ0CC147v3v6rKvNPOz7ejugo8cD48aW1nIHNyYz0=”https://www.aiwalls.com/uploadfile/Collfiles/20140819/2014081909105419.png” alt=”\”>

發現精靈隱藏瞭,這裡有很多動畫都可以去嘗試

CCHide *hide =CCHide::create(); //隱藏精靈

CCFadeTo *to =
CCFadeTo::create(2,0);
//0~255 淡入淡出用時2s

CCMoveTo *toto =
CCMoveTo::create(2,ccp(500,
300)); //移動到某個點用時2s

CCMoveBy *toby =
CCMoveBy::create(2,ccp(300,
0)); //2秒增加 x加300
y不變

CCJumpBy *by =CCJumpBy::create(2,ccp(100,0),
200,
1);//2秒鐘內跳到x,y為(300,0)的位置每次會跳200高一共跳30次

sprite->runAction(hide); //運行動畫

這些是一些基礎的動畫 都可以去嘗試 截圖看不到明顯的效果,隻要sprite->runAction(hide)
改括號裡面內容。

//2.實現一個簡單的軌跡

軌跡圖片:

//實現一個軌跡

CCPointArray *pa =CCPointArray::create(5);//創建一個點數組

pa->addControlPoint(ccp(0,0));

pa->addControlPoint(ccp(100,0));
//向右移動

pa->addControlPoint(ccp(100, -50));//向下移動

pa->addControlPoint(ccp(150, -50));//向右移動

pa->addControlPoint(ccp(150,0));
//向向移動

pa->addControlPoint(ccp(300,0));
//向右移動

CCCardinalSplineBy *spby =CCCardinalSplineBy::create(5,
pa,1);
//按軌跡移動

sprite->runAction(spby); //運行一個動畫

運行:

//3.實現一個曲線

代碼:

//用Bezier實現曲線運動

ccBezierConfig bc;

bc.controlPoint_1 =ccp(400,
400); //控制點1

bc.controlPoint_2 =ccp(800,
200); //控制點2

bc.endPosition =ccp(900,
300); //終點

CCBezierTo *bezie =
CCBezierTo::create(3, bc); //傳引用

sprite->runAction(bezie); //運行一個動畫

運行:

自己運行才能看到效果!!!

//4.通過CCSequence 實現組合動畫 順序執行

//用CCSequence實現組合動畫 順序執行

CCMoveTo *tototo =
CCMoveTo::create(2,ccp(900,
300));//移動

CCEaseSineIn *in =
CCEaseSineIn::create(tototo);
//控制速度先慢後快可以加可以不加試試

CCBlink *blink =
CCBlink::create(3,10);
//閃爍一個動畫

CCDelayTime *delay =CCDelayTime::create(2);

CCSequence *sequence =
CCSequence::create(in,delay,blink,NULL);//組合動畫按順序執行
先移動
然後延時
最後閃爍

sprite->runAction(sequence); //運行一個動畫

運行:

自己運行才能看到效果!!!

//5.通過CCSpawn 實現組合動畫
並行執行

//並行執行動畫

CCMoveTo *totototo =
CCMoveTo::create(2,
ccp(900,
300));

CCRotateBy *rotate =
CCRotateBy::create(2,
3600); //旋轉 3600度

CCSpawn *spawn = CCSpawn::create(totototo,rotate,NULL);

sprite->runAction(spawn);

運行:

自己運行才能看到效果!!!

//6.動畫執行完畢 可以進行回掉

先看 CCCallFunc 類的創建:

CCCallFunc *func = CCCallFunc::create(this, ) SEL_CallFunc的定義

typedef
void (CCObject::*SEL_CallFunc)(); 由此看出SEL_CallFunc 是個函數指針 指向一個沒有函數參數 函數的返回值為void的函數

下面就定義一個這樣的函數:

.h文件:

class MainScene:public
CCLayer {

private:

void onCallFun();
//動畫執行完
回掉函數

.cpp文件 函數的實現:

void
MainScene::onCallFun()

{

CCLOG(“action over”);

}

隻做瞭一個打印。。

下面看回掉的具體實現代碼:

//並行執行動畫

CCMoveTo *totototo =
CCMoveTo::create(2,
ccp(900,
300));

CCRotateBy *rotate =
CCRotateBy::create(2,
3600); //旋轉 3600度

CCSpawn *spawn = CCSpawn::create(totototo,rotate,NULL);

// sprite->runAction(spawn);

//動畫執行完後
回掉

CCCallFunc *func =
CCCallFunc::create(this,
callfunc_selector(MainScene::onCallFun));

CCSequence *seq =
CCSequence::create(spawn,func,NULL);
//添加到隊列

sprite->runAction(seq);

運行:

可以看到 當動畫執行完後 action over 被打印出來。。。

發佈留言