COCOS學習筆記--變速動作Speed和ActionEase_Cocos2d-x

來源:互聯網
上載者:User

變速動作和複合動作類似,也是一種特殊的動作,它可以把任何動作按照改變後的速度執行。變速動作與複合動作最大的區別就是複合動作只是單純的組合一系列動作,而變速的做在組合一系列動作後還要去改變動作的執行速度。

變速動作主要分為2大類:Speed和ActionEase。

 

一.Speed

用於線性地改變某個動作的速度,也就是說成倍數的改變某動作的整體速度。Speed相當於一個封裝器,將需要改變速度的動作封裝到其中。

Speed類源碼可以在CCAction類中看到:

class CC_DLL Speed : public Action{    ......    static Speed* create(ActionInterval* action, float speed);    inline float getSpeed(void) const { return _speed; }    inline void setSpeed(float speed) { _speed = speed; }    ......}

可以看到,Speed類是直接繼承自Action類的。其create()方法接收2個參數,第一個是其要封裝的動作,必須是ActionInterval類型的動作,即簡單的持續動作或複合動作,不可以是即時動作;第二個參數是一個float類型的速度值speed,這個speed就是該方法要封裝的動作原來執行速度的倍數,比如speed=0.5,代表封裝後速度變為原來的0.5倍,speed=2,代表封裝後速度是原來速度的2倍。


舉個栗子:

//建立一個spriteauto sprite = Sprite::create("haha.jpg");//添加this->addChild(sprite);//建立MoveTo動作auto _moveTo = MoveTo::create(3.0,Vec2(920,320));//建立Speed變速動作//參數:1.動作 2.所封裝動作原來速度的倍數auto _speed = Speed::create(_moveTo,2);//執行動作sprite->runAction(_speed);


二.ActionEase

Speed雖然能改變動作的速度,但只能按比例改變速度。ActionEase可以實現動作的速度由快到慢、速度隨時間改變的運動。該類包含好多種類的緩衝運動:指數緩衝、正弦緩衝、彈性緩衝、跳躍緩衝和回震緩衝等等。每類緩衝運動基本都包含3個不同時期的變換:In、Out和InOut,這3個變換有是什麼呢。簡單來說,In是在運動起始時加速,Out是在運動快結束時減速,InOut包含兩者,就是先加速後減速。

 

我們可以先看一下ActionEase類的源碼:

class CC_DLL ActionEase : public ActionInterval

這句聲明可以看到,ActionEase類是繼承自ActionInterval類,所以它也是一種持續動作。


下面是所有種類緩衝運動的聲明:

//指數緩衝class CC_DLL EaseExponentialIn : public ActionEaseclass CC_DLL EaseExponentialOut : public ActionEaseclass CC_DLL EaseExponentialInOut : public ActionEase //正弦緩衝class CC_DLL EaseSineIn : public ActionEaseclass CC_DLL EaseSineOut : public ActionEaseclass CC_DLL EaseSineInOut : public ActionEase //彈性緩衝class CC_DLL EaseElastic : public ActionEaseclass CC_DLL EaseElasticIn : public EaseElasticclass CC_DLL EaseElasticOut : public EaseElasticclass CC_DLL EaseElasticInOut : public EaseElastic //跳躍緩衝class CC_DLL EaseBounce : public ActionEaseclass CC_DLL EaseBounceIn : public EaseBounceclass CC_DLL EaseBounceOut : public EaseBounceclass CC_DLL EaseBounceInOut : public EaseBounce //回震緩衝class CC_DLL EaseBackIn : public ActionEaseclass CC_DLL EaseBackOut : public ActionEaseclass CC_DLL EaseBackInOut : public ActionEase //貝塞爾緩衝class CC_DLL EaseBezierAction : public ActionEase//二次緩衝class CC_DLL EaseQuadraticActionIn : public ActionEaseclass CC_DLL EaseQuadraticActionOut : public ActionEaseclass CC_DLL EaseQuadraticActionInOut : public ActionEase//四次緩衝class CC_DLL EaseQuarticActionIn : public ActionEaseclass CC_DLL EaseQuarticActionOut : public ActionEaseclass CC_DLL EaseQuarticActionInOut : public ActionEase//五次緩衝class CC_DLL EaseQuinticActionIn : public ActionEaseclass CC_DLL EaseQuinticActionOut : public ActionEaseclass CC_DLL EaseQuinticActionInOut : public ActionEase//迴圈緩衝class CC_DLL EaseCircleActionIn : public ActionEaseclass CC_DLL EaseCircleActionOut : public ActionEaseclass CC_DLL EaseCircleActionInOut:public ActionEase//立方緩衝class CC_DLL EaseCubicActionIn:public ActionEaseclass CC_DLL EaseCubicActionOut : public ActionEaseclass CC_DLL EaseCubicActionInOut : public ActionEase 

可以看出,ActionEase類提供了的各種緩衝方式的子類,每一種緩衝方式(貝塞爾緩衝除外)基本都分為In、Out和InOut三種不同時期的變換。

 

下面來舉個使用ActionEase的栗子:

//建立一個spriteauto sprite = Sprite::create("haha.jpg");//添加this->addChild(sprite);//建立MoveTo動作auto _moveTo = MoveTo::create(3.0,Vec2(920,320));//建立正弦緩衝動作auto _sineEase = EaseSineInOut::create(_moveTo);//執行動作sprite->runAction(_sineEase);

其他緩衝類型的動作的使用方法也都與上面的例子一樣,只是函數名不同。話說我試了好幾種,覺得這麼多種類的運動方式還真看不出來太大的區別,反正我覺得看起來都差不多O(∩_∩)O哈哈~。

 



以上。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.