Action 就像發給 cocosNode 物件的指令,通常用於修改物件屬性(位置、旋轉、縮放等)。若屬性在一段時間內變化,屬於 IntervalAction;否則為 InstantAction(即時動作)。
例:MoveBy 在 2 秒內改變位置,屬於 IntervalAction。
// 2秒內向右移動50像素、向上移動10像素
[sprite runAction:[MoveBy actionWithDuration:2 position:ccp(50,10)]];
[action reverse] 產生相反方向動作pauseAllActionsForTarget: / resumeAllActionsForTarget:| 動作 | 類型 | 說明 |
|---|---|---|
| MoveBy | 相對 | 相對當前位置位移 |
| MoveTo | 絕對 | 移動至絕對座標 |
| JumpBy | 相對 | 抛物線跳躍位移 |
| JumpTo | 絕對 | 跳躍至絕對座標 |
| Place | 即時 | 瞬間移至指定位置(無時間概念) |
// MoveBy:相對移動
id moveByAction = [MoveBy actionWithDuration:2 position:ccp(30,50)];
// MoveTo:移動至觸控點
id moveToAction = [MoveTo actionWithDuration:3 position:[[Director sharedDirector] convertCoordinate:point]];
// JumpBy:3秒內相對位移(100,100),跳躍高度20,跳20次
id jumpByAction = [JumpBy actionWithDuration:3 position:ccp(100,100) height:20 jumps:20];
// Place:即時移動
id placeAction = [Place actionWithPosition:[[Director sharedDirector] convertCoordinate:point]];
// 等同於 MoveTo duration:0
| 動作 | 類型 | 說明 |
|---|---|---|
| ScaleBy | 相對 | 相對當前縮放比例 |
| ScaleTo | 絕對 | 縮放至指定比例 |
// 3秒內縮放至原本一半
id scaleByAction = [ScaleBy actionWithDuration:3 scaleX:0.5 scaleY:0.5];
id scaleToAction = [ScaleTo actionWithDuration:3 scaleX:0.4 scaleY:0.5];
| 動作 | 類型 | 說明 |
|---|---|---|
| RotateBy | 相對 | 相對當前角度旋轉 |
| RotateTo | 絕對 | 旋轉至指定角度 |
// 3秒內向右旋轉30度
id rotateByAction = [RotateBy actionWithDuration:3 angle:30.0];
id rotateToAction = [RotateTo actionWithDuration:3 angle:30.0];
記住口訣: 以
By結尾 = 相對動作;以To結尾 = 絕對動作。
CGSize s = [[Director sharedDirector] winSize];
id actionTo = [MoveTo actionWithDuration:2 position:ccp(s.width-40, s.height-40)];
id actionBy = [MoveBy actionWithDuration:2 position:ccp(80,80)];
[sprite1 runAction:actionTo];
[sprite2 runAction:actionBy];
幾乎所有動作皆實作 reverse 方法,產生相反行為的新動作:
id move = [MoveBy actionWithDuration:2 position:ccp(80,80)];
id move_reverse = [move reverse];
// move_reverse 為 MoveBy,duration=2,position=ccp(-80,-80)