本系列文章是对<3D Apple Games by Tutorials>一书的学习记录和体会git
此书对应的代码地址github
SceneKit系列文章目录swift
动做能够让你操做节点的位置,缩放,旋转和透明度.好比左滑,场景中的小猪向左转并跳一步. 基本分类有四种:Move(移动), Scale(缩放), Rotate(旋转)和Fade(透明渐变).还有两种特殊的动做:Sequence(序列,即顺序执行)和Group(组,即同时执行).并发
注意,关于物理形体physics bodyapp
当须要物理引擎来控制节点的移动和旋转时,应设置为dynamic.若是不须要移动,但仍能参与物理模拟,应设置为static.若是你既想控制某些节点的移动和旋转,同时仍能参与物理模拟,应设置为kinematic.编辑器
序列和组都是一系列动做的组合,能够让动做更复杂 oop
拖放一个旋转动做到节点,设置开始时间和持续时长,指定为绕z轴旋转 post
// 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])
复制代码