Cocos2d-x-v3動做體系

Cocos2d-x-v3動做體系

        cocos2d-x-v3版本v2的版本有的很大的改動,最直觀的是在一些函數的改動和類名的改動上,首先以CC開頭的類,都再也不使用CC。在我我的的理解上,原來的cocos2d-x是徹底從iphone的框架cocos2d移植過來的,代碼的風格和編程的思想都及相似於Object-C,除了語法是C++的外,其餘就像是OC版的翻譯,新的版本更好的體現了跨平臺的特性,也更多的運用了C++的一些編碼思想和語言特色,更易於各平臺的開發者使用。這篇博客的主要內容,是總結cocos2d中行爲動做的處理方法和相關函數。編程

1、瞬時動做

        這類行爲只能稱爲動做,不能稱做動畫,其執行是瞬時的,沒有但是化的過程。框架

        cocos2d中經常使用的瞬時動做有以下幾種:iphone

      FlipX:關於x軸作鏡像變換。ide

      FlipY:關於y軸作鏡像變換。函數

      Hide:隱藏。動畫

      Show:顯示。this

      ToggleVisibility:切換隱藏和顯示。編碼

      Place:將對象放置在某個位置。spa

2、延時動做

       延時動做就是動畫,將動做的過程展示出來,cocos2d引擎中的幾種延時動做以下:翻譯

       1. MoveTo:將對象移動到某一位置,是絕對位置,移動後不會記錄對象的原始位置,動做不能進行反轉。例如:

auto action = MoveTo::create(2, Vec2(100, 100));//2S時間移動到(100,100)
    label->runAction(action);//執行動做

        2.MoveBy:將對象相對如今的位置移動某個距離,這個移動是相對對象當前位置的,能夠反轉。

      3.JumpTo:和MoveTo相似,對象跳動到某一位置,例如:

label->runAction(JumpTo::create(2, Vec2(100, 100), 30, 3));//對象在2S內跳三次,每次高度爲30像素,跳到(100,100)點

       4.JumpBy:和MoveBy相似。

        5.BezierTo:以貝塞爾曲線的方式移動到某一位置,例如:

ccBezierConfig config;
    config.controlPoint_1=Vec2(300, 300);
    config.controlPoint_2=Vec2(200,200);
    config.endPosition=Vec2(100, 100);//設置兩個中間點和一個終點
    
    label->runAction(BezierTo::create(2, config));//2S時間經過貝塞爾曲線方式移動

        6.BezierBy:以貝塞爾曲線的方式進行相對移動。

      7.ScaleTo:相對原始大小縮放到某一尺度。

      8.ScaleBy:相對目前大小進行縮放。

      9.RotateTo:相對原始狀態旋轉到某一角度。

      10.RotateBy:相對目前轉檯旋轉某個角度。

      11.Blink:閃爍動畫。

      12.TintTo:顏色轉化到某一色值

      13.TintBy:相對目前色值,顏色相對轉變某一色值。

      14.FadeTo:變暗到某一透明度

      15.FadeIn:淡入動做

      16.FadeOut:淡出動做

3、動做的組合方式

        cocos2d中不只爲咱們提供的各類動做方式,也爲咱們提供了相關的類用於管理這些動做:

     1.動做序列Sequence:這個類能夠建立一個動做序列,按序列中動做的順序依次執行動做,以下:

 Sequence * sq= Sequence::create(TintTo::create(2, Color3B(123, 123, 123)),RotateTo::create(2, 30), NULL);
    label->runAction(sq);//建立動做序列,使對象執行先變顏色,在旋轉的動畫

      2.同步動做組Spawn:這個類和Sequence相似,只是他裏面的動畫會同時一塊兒執行。

    3.有限次的循環動做Repeat:這個類可使某一動做循環執行數次,例如:

Repeat * re = Repeat::create(RotateBy::create(2, 30), 5);//旋轉5次30度
    label->runAction(re);

    4.無限次循環動做RepeatForever:

RepeatForever * ref = RepeatForever::create(RotateBy::create(2, 30));
    label->runAction(ref);

    5.幀動畫

cocos2d中一樣提供了對幀動畫的支持:

   //建立設置精靈
    Sprite * spr = Sprite::create( "CloseNormal.png");
    spr->setPosition(Vec2(100, 100));
    //建立兩幀精靈圖片
    SpriteFrame * frame1 = SpriteFrame::create("CloseNormal.png", Rect(0, 0, 50, 50));
    SpriteFrame * frame2 = SpriteFrame::create("CloseSelected.png", Rect(0, 0, 50, 50));
    Vector<SpriteFrame *>  arr;
    arr.pushBack(frame1);
    arr.pushBack(frame2);
    //建立動畫體 第一個參數是幀容器,第二個是每一幀的播放時間,第三個是循環次數
    Animation * ani = Animation::createWithSpriteFrames(arr, 1, 1);
    //建立動做
    Animate *ant = Animate::create(ani);
    RepeatForever * ref = RepeatForever::create(ant);
    spr->runAction(ref);
    this->addChild(spr);

    6.反轉動畫

能夠經過reverse方法獲取動做的反轉動做,例如:

auto label = Label::createWithTTF("Hello World", "fonts/arial.ttf", 24);
    MoveBy * move = MoveBy::create(3, Vec2(100, 100));
    Sequence * sq = Sequence::create(move,move->reverse(), NULL);
    label->runAction(sq);
    //label 會先相對移動(100,100),再反移動回來

    7.動做的速度控制

經過一些速度相關的類,cocos2d能夠很輕鬆的建立出各類線性與非線性的動做。例如:

auto label = Label::createWithTTF("Hello World", "fonts/arial.ttf", 24);
    MoveTo * move = MoveTo::create(3, Vec2(-200, -200));
    EaseIn* an = EaseIn::create(move, 5);
    label->runAction(an);
//label的運動會先慢後快,速度差爲5倍

EaseIn:由慢變快,線性

EaseOut:由快變慢,線性

EaseInOut:由慢變快再由快變慢

EaseSineIn:由慢變快,正弦規律

EaseSineOut:由快變慢,正弦規律

EaseSineInOut:由慢變快再由快變慢,正弦規律

EaseExponentialIn:由慢變快,指數規律

EaseExponentialOut:由快變慢,指數規律

EaseExponentialInOut:由慢變快再由快變慢,指數規律

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索