cocos2d-x ios遊戲開發初認識(七) 簡單的動畫

來源:互聯網
上載者:User

cocos2d-x ios遊戲開發初認識(七) 簡單的動畫

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

下面具體根據程式碼分析:

為了清晰最好將前幾節的代碼注釋掉。

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

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.實現精靈的隱藏

<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgIENDSGlkZSAqaGlkZSA9Q0NIaWRlOjpjcmVhdGUoKTsgLy/S/rLYvqvB6TwvcD4KPHA+ICAgc3ByaXRlLT5ydW5BY3Rpb24oaGlkZSk7ICAgICAgICAgLy/Uy9DQtq+7rTwvcD4K1MvQ0CC147v3v6rKvNPOz7ejugo8cD48aW1nIHNyYz0="http://www.2cto.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 selector#>) SEL_CallFunc的定義

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

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

.h檔案:

class MainScene:publicCCLayer {

private:

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

.cpp檔案 函數的實現:

voidMainScene::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 被列印出來。。。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.