Actions允许您在场景中操纵节点的位置,缩放,旋转和不透明度。例如,当玩家向左滑动时,Pig先向左转,同时向左跳一个空格。右滑动应该做相反的事情。
这些基本动作通过在节点上的序列和组中运行动作来实现。
当您选择节点时,您可以在Scene Kit编辑器中通过将操作从对象库拖放到辅助编辑器中,在场景编辑器的下方,来构建动作序列。从编码的角度来看,首先需要创建一个SCNAction对象,如果需要,可以选择性地设置它的timingMode,然后可以在任何SCNNode实例上执行Actions通过在节点上使用runAction(_ :)方法。
操作节点在场景中的行为有四个基本类别的动作:移动,缩放,旋转和淡入淡出。还有两个更特殊的操作用于在序列或组中运行操作。
注意:回想起当你第一次了解物理学的时候,你发现了三种类型的物理学体,它们是dynamic
,kinematic
和 static
。
如果您希望物理引擎控制节点的运动和旋转,您可以将其物理体设置为dynamic
。如果您希望节点永远不会移动,但仍然参与物理模拟,您将其物理体设置为static
。当您想要控制特定节点的运动和旋转时,在让其参与物理模拟的过程中,您将将其物理身体类型设置为kinematic
。
Move actions
Move Action: 从当前节点的位置偏移
下图展示了将球沿着X轴的正方向移动3, 只需设置Action的position为(x:3, y:0, z:0)即可
MoveTo Action: 将节点移动到指定的位置, 忽视当前的节点在什么位置
Scale actions
Scale Action:在当前的基础上进行缩放
ScaleTo Action:将节点缩放到指定的比例因子,而不管节点的当前比例
Rotate actions
Rotate Action:在当前旋转基础上再旋转
RotateTo Action:旋转到指定角度,与当前旋转无关
RotateTo Action (Shortest):旋转到指定角度,走最短路径
RotateBy Axis Angle Action:绕某个轴旋转
RotateTo Axis Angle Action:绕某个轴旋转到指定角度
Fade actions
FadeOut Action:淡出,从当前透明度渐渐变完全透明
FadeIn Action:淡入,从当前透明度渐渐显示出来,完全不透明
FadeOpacityTo Action:改变不透明度到指定值
渐渐消失的效果
Sequenced and grouped actions
排序和分组动作
一旦您创建了一大堆基本操作,您可以将它们组合在一起,以便使序列和组合一起运行,或者同时一起运行。
下图显示了在两秒钟内播放的几个基本动作之间的关系:
Actions:左边简单地列举了四个基本动作:bounce-up, bounce-down, move-right and rotate-right.。
Sequence:在蓝色矩形内,您将在序列中看到两个动作。所以当你移动时间线时,光标将首先启动反弹动作一秒钟,一旦完成,它将开始运行反弹动作。这被称为一系列动作。
Group:红色矩形内是蓝色的动作顺序,以及右移和右旋两个动作。 当您移动时间轴时,光标将同时开始反弹,向右移动和右旋转。 当时间线达到一秒钟时,反弹动作完成,弹起动作开始。 同时,右移右移仍然运行,并在该点完成一半。 当时间线达到二秒标记时,所有操作都已完成。 通过将操作分组在一起,您可以并行运行它们。
想要更加真实的模拟物理运动, 只是简单是使用linear(匀速运动时不行的), 试想一下, 当一个物体被抛向空中它不是允许的先上后下的, 而是先以一个初始速度向上, 然后变慢, 然后停下, 然后再慢慢的加速向下运动.
为了是运动更加真实, SceneKit提供了四种timing