說明
本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會
動作可以讓你操作節點的位置,縮放,旋轉和透明度.比如左滑,場景中的小豬向左轉並跳一步. 基本分類有四種:Move(移動), Scale(縮放), Rotate(旋轉)和Fade(透明漸變).還有兩種特殊的動作:Sequence(序列,即順序執行)和Group(組,即同時執行).
注意,關於物理形體physics body
當需要物理引擎來控制節點的移動和旋轉時,應設定為dynamic.如果不需要移動,但仍能參與物理模擬,應設定為static.如果你既想控制某些節點的移動和旋轉,同時仍能參與物理模擬,應設定為kinematic.
Move actions移動動作
![QQ20170416-150550@2x.png](https://i.iter01.com/images/2add401472d3ac7a1c5f337ac2bec29019e8116a754cd041b6dc7581319f5629.png)
- Move Action:在當前位置上移動一段
- MoveTo Action:移動到指定位置,與當前位置無關
Scale actions縮放動作
![QQ20170416-150642@2x.png](https://i.iter01.com/images/4f51ea83c75d1cd35722b841b30e22828e426766b9dcc7e61b2cc7ab183bbf6b.png)
- Scale Action: 在當前縮放基礎上縮放.
- ScaleTo Action:縮放到指定比例,與當前比例無關
Rotate actions旋轉動作
![QQ20170416-150736@2x.png](https://i.iter01.com/images/112331ae07426ac7baf622430962e314030ba02d8bd8fdc9669492bbe215f7e4.png)
- Rotate Action:在當前旋轉基礎上再旋轉
- RotateTo Action:旋轉到指定角度,與當前旋轉無關
- RotateTo Action (Shortest):旋轉到指定角度,走最短路徑
- RotateBy Axis Angle Action:繞某個軸旋轉
- RotateTo Axis Angle Action:繞某個軸旋轉到指定角度
Fade actions褪色動作
![QQ20170416-152151@2x.png](https://i.iter01.com/images/e84afec085cdded08a61c365cc17ff92b866d64f269c836cb760a9b93bdd74dd.png)
- FadeOut Action:淡出,從當前透明度漸漸變完全透明
- FadeIn Action:淡入,從當前透明度漸漸顯示出來,完全不透明
- FadeOpacityTo Action:改變不透明度到指定值
Sequenced and grouped actions序列和組動作
序列和組都是一系列動作的組合,可以讓動作更復雜
![QQ20170416-151058@2x.png](https://i.iter01.com/images/9bcb52f5acf610c459c51c7566778d117493f1829bd1509c6f124178df18a7cb.png)
- Actions:左側的每一個都是一個動作,上跳,下落,右移,右轉
- Sequence:藍色區域內就是序列,上跳動作執行1秒完成後,執行下落動作,按順序
- Group:紅色區域就是組,將會併發同時執行
Linear線性,Ease-In漸入,Ease-Out漸出,East-In-Out漸入漸出
![QQ20170416-151324@2x.png](https://i.iter01.com/images/28a012dad4ba3db347375af4e3250ed9c1018b544025027d4ff967faac41444a.png)
The action editor動作編輯器
![QQ20170416-151351@2x.png](https://i.iter01.com/images/912dac8457b7b6b6d93ab42c2e05b3ef0a98a8389543d952b76d065c0b30275e.png)
- Expand/Collapse Action Editor:展開/收縮動作編輯器
- Timeline:時間線
- Time Cursor:時間遊標
- Time Zoom:時間縮放
- Drag&Drop Actions:拖放動作
動作建立
拖放一個旋轉動作到節點,設定開始時間和持續時長,指定為繞z軸旋轉
![QQ20170416-151418@2x.png](https://i.iter01.com/images/b0246e0901e529114b2551f941db4393c8dba86c8bd1b7700c4be41d36a8868e.png)
![QQ20170416-151432@2x.png](https://i.iter01.com/images/a79af1aa627b517b05e307bfdeffea2865439d0ed2620cd3085df77b858d4f99.png)
![QQ20170416-151451@2x.png](https://i.iter01.com/images/2c6a4a4fb3d4a28b3739a717d6b91c40c7cab3f536fa6d6d77297737e798eafc.png)
![QQ20170416-151504@2x.png](https://i.iter01.com/images/902e8ee359e0d8347fcd95b2e2af2b8d6431f783aacff9e6c0f21150ea9587be.png)
程式碼新增動作
// 1.時長
let duration = 0.2
// 2.上下移動動作
let bounceUpAction = SCNAction.moveByX(0, y: 1.0, z: 0, duration:
duration * 0.5)
let bounceDownAction = SCNAction.moveByX(0, y: -1.0, z: 0, duration:
duration * 0.5)
// 3.時間模式
bounceUpAction.timingMode = .EaseOut
bounceDownAction.timingMode = .EaseIn
// 4.動作序列
let bounceAction = SCNAction.sequence([bounceUpAction, bounceDownAction])
// 5.四周移動動作
let moveLeftAction = SCNAction.moveByX(-1.0, y: 0, z: 0, duration:
duration)
let moveRightAction = SCNAction.moveByX(1.0, y: 0, z: 0, duration:
duration)
let moveForwardAction = SCNAction.moveByX(0, y: 0, z: -1.0, duration:
duration)
let moveBackwardAction = SCNAction.moveByX(0, y: 0, z: 1.0, duration:
duration)
// 6.旋轉動作
let turnLeftAction = SCNAction.rotateToX(0, y: convertToRadians(-90), z:0, duration: duration, shortestUnitArc: true)
let turnRightAction = SCNAction.rotateToX(0, y: convertToRadians(90), z:
0, duration: duration, shortestUnitArc: true)
let turnForwardAction = SCNAction.rotateToX(0, y: convertToRadians(180),
z: 0, duration: duration, shortestUnitArc: true)
let turnBackwardAction = SCNAction.rotateToX(0, y: convertToRadians(0),
z: 0, duration: duration, shortestUnitArc: true)
// 7.動作組
jumpLeftAction = SCNAction.group([turnLeftAction, bounceAction,
moveLeftAction])
jumpRightAction = SCNAction.group([turnRightAction, bounceAction,
moveRightAction])
jumpForwardAction = SCNAction.group([turnForwardAction, bounceAction,
moveForwardAction])
jumpBackwardAction = SCNAction.group([turnBackwardAction, bounceAction,
moveBackwardAction])
複製程式碼