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

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

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

運行 點擊開始遊戲:


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

    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秒增加 x300 y不變

    CCJumpBy *by =CCJumpBy::create(2,ccp(100,0), 200, 1);//2秒鐘內跳到xy(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的定義

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 被打印出來。。。



發佈了42 篇原創文章 · 獲贊 7 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章