1. 程式人生 > >egret.Tween跳躍緩動效果實現

egret.Tween跳躍緩動效果實現

今日在工作中遇到一個需求:

  1. 要求目標元件能從一定高度落地並實現彈跳效果
  2. 落地後目標元件變矮變胖
  3. 彈起時目標元件變瘦變高

####Tween使用
在實現此需求之前,先學習一下白鷺引擎的Tween。官方文件如是說:

![這裡寫圖片描述](http://edn.egret.com/cn/data/upload/asset/20160105/568b43fa06115.gif) ``` class TweenTest extends egret.DisplayObjectContainer{ public constructor(){ super(); this.addEventListener(egret.Event.ADDED_TO_STAGE,this.onAddToStage,this); } private onAddToStage(event:egret.Event){ var shp:egret.Shape = new egret.Shape(); shp.graphics.beginFill( 0x00ff00 ); shp.graphics.drawRect( 0, 0, 100, 100 ); shp.graphics.endFill(); shp.x = 50; this.addChild( shp ); var tw = egret.Tween.get( shp ); tw.to( {x:150}, 1000 ); } } ``` 如程式碼所示,每一個緩動物件是用 Tween.get 來的獲得的,該方法需要傳入用於緩動的目標物件,即例中的 shp ,然後通過 to 方法來給出需要設定緩動的具體引數。to 的第一個引數用於設定緩動屬性以及目標值:例中的屬性為 x ,目標值為 150,即會將 shp 從當前 x 座標位置緩動到 x 座標為 150;to 的第二個引數為緩動長度,單位為毫秒,例中的緩動長度為 1000毫秒,即 1 秒 。
var tw = egret.Tween.get( shp, { loop:true} );      //迴圈
//在 Tween 執行過程中,也許我們邏輯需要實時做一些變化。跟蹤這個過程同樣可以通過在 Tween.get 的第二個引數中,加入變化事件處理函式的定義來實現。
var obj = { x:0 };

var funcChange = function():void{
    console.log( this.x );
}

egret.Tween.get( obj, { onChange:funcChange, onChangeObj:obj } )
    .to( {x:600}, 1000 , egret.Ease.backInOut );

對於緩動的控制,可以設定若干其他方法。主要有以下兩個:

  1. call 在某個緩動過程結束時,可以用 call 產生一個回撥,直接將回調函式作為引數傳給call就可以了。
  2. wait 用於多個緩動連續設定中設定中間的等待時間,也是以毫秒為單位。
    ####最終實現如下
    如果想使用緩動動畫,你需要使用 Tween 這個類。 Tween 中封裝了最常用的緩動動畫功能,包括動畫時間設定,緩動動畫控制, 緩動效果控制等等。
var tw = egret.Tween.get( shp );         //捕獲shp,shp為目標元件
tw.to( {scaleX:0.8, scaleY:1.1, y:50}, 1 )      //y方向緩動至50,橫向變大0.8倍,縱向變大1.1倍,只用一毫秒 
  .to( {scaleX:1.1, scaleY:0.8, y:0}, 400)
  .to( {scaleX:0.8, scaleY:1.1, y:50}, 400)
  .to( {scaleX:1, scaleY:1, y:0}, 400);