cocos2d-x-v3版本v2的版本有的很大的改動,最直觀的是在一些函數的改動和類名的改動上,首先以CC開頭的類,都再也不使用CC。在我我的的理解上,原來的cocos2d-x是徹底從iphone的框架cocos2d移植過來的,代碼的風格和編程的思想都及相似於Object-C,除了語法是C++的外,其餘就像是OC版的翻譯,新的版本更好的體現了跨平臺的特性,也更多的運用了C++的一些編碼思想和語言特色,更易於各平臺的開發者使用。這篇博客的主要內容,是總結cocos2d中行爲動做的處理方法和相關函數。編程
這類行爲只能稱爲動做,不能稱做動畫,其執行是瞬時的,沒有但是化的過程。框架
cocos2d中經常使用的瞬時動做有以下幾種:iphone
FlipX:關於x軸作鏡像變換。ide
FlipY:關於y軸作鏡像變換。函數
Hide:隱藏。動畫
Show:顯示。this
ToggleVisibility:切換隱藏和顯示。編碼
Place:將對象放置在某個位置。spa
延時動做就是動畫,將動做的過程展示出來,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:淡出動做
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