Ease(緩動) 是一類特殊的複合動作,能改變內部動作的時間曲線,在總時長不變的前提下,使運動呈現非勻速效果(加速、減速、彈跳等)。Flash 中常稱為 Tweening 或 Easing。
參考資源:Tweener 轉場示例、Robert Penner Easing Demo
內部實作核心邏輯:
-(void) update:(ccTime)t {
[inner update: powf(t, rate)];
}
rate 參數控制加速率。
// 開始加速
id action = [MoveTo actionWithDuration:2 position:ccp(100,100)];
id ease = [EaseIn actionWithAction:action rate:2];
[sprite runAction:ease];
// 結束加速
id action = [MoveTo actionWithDuration:2 position:ccp(100,100)];
id ease = [EaseOut actionWithAction:action rate:2];
[sprite runAction:ease];
// 開始與結束加速
id action = [MoveTo actionWithDuration:2 position:ccp(100,100)];
id ease = [EaseInOut actionWithAction:action rate:2];
[sprite runAction:ease];
模擬彈簧效果,時間值可能超出 [0,1] 範圍,內部動作需能處理特殊值。v0.8.2+ 可用。
period 參數控制彈性強度,建議 0.3~0.45。
id move = [MoveBy actionWithDuration:3 position:ccp(350,0)];
// 開始彈性
id action = [EaseElasticIn actionWithAction:move period:0.3f];
// 結束彈性
id action = [EaseElasticOut actionWithAction:move period:0.3f];
// 首尾彈性
id action = [EaseElasticInOut actionWithAction:move period:0.3f];
模擬彈跳效果,v0.8.2+ 可用。
id move = [MoveBy actionWithDuration:3 position:ccp(350,0)];
// 開始彈跳
id action = [EaseBounceIn actionWithAction:move];
// 結束彈跳
id action = [EaseBounceOut actionWithAction:move];
// 首尾彈跳
id action = [EaseBounceInOut actionWithAction:move];
v0.8.2+ 可用。
id move = [MoveBy actionWithDuration:3 position:ccp(350,0)];
// 開始回退
id action = [EaseBackIn actionWithAction:move];
// 結束回退
id action = [EaseBackOut actionWithAction:move];
// 首尾回退
id action = [EaseBackInOut actionWithAction:move];
Speed 動作可直接修改內部動作的執行速度:
id move = [MoveBy actionWithDuration:3 position:ccp(350,0)];
id action = [Speed actionWithAction:move speed:1.0f]; // 原速
[action setSpeed:2.5f]; // 2.5倍速
[action setSpeed:0.5f]; // 0.5倍速(即慢2倍)