SpriteKit提供了一个图形渲染和动画的基础结构,你可以使用它让任意类型的纹理图片或者精灵动起来。SpriteKit使用传统的渲染循环,在每一帧被渲染之前帧的内容就已经处理好了。你的游戏决定了场景的内容以及场景中的每一帧是如何变化的。SpriteKit利用图形硬件高效的渲染动画的每一帧。SpriteKit是经过高度优化的,所以精灵的位置可以在每帧动画中任意的改变。
Sprite同时提供了对游戏开发十分有用的一些功能,包括基本的声音回放支持以及物理模拟。另外,XCodeç对SpriteKit提供了内置的支持,因此你可以在XCode中直接创建特殊复杂的效果以及材质贴图。这种框架(Framework)和工具(Tools)的结合使得SpriteKit成为游戏开发以及其他需要类似动画效果的应用程序的很好的选择。对于其他类型的用户界面(user-interface)动画,可以使用Core Animation.
重要提示:这仅仅是描述OS X开发技术的一个初步文档,这个文档将来会有所改动,按照本文档进行开发的应用程序必须在最终的操作系统中进行充分测试并根据最终文档进行调整
概览
SpriteKit在IOS和OS X中均可使用,它使用主机设备提供的图形硬件来高帧速率合成2D图片,SpriteKit支持很多不同的内容,包括:
无纹理或者有纹理的举行(精灵)
文本
任意基于CGPath的形状
视频
SpriteKit同时支持裁剪以及其他的一些效果:你可以将这些效果应用于所有或者一部分内容,你可以在每一帧中活动(animate)或者改变这些元素(elememt)。你也可以附加物理主体(physics bodies)到这些元素中,使得他们支持推动和碰撞。
因为SpriteKit支持丰富的渲染结构并接管了所有向OpenGL发出绘画指令的的底层工作(low-level work),你可以将你的重心放在解决高层次的设计问题以及伟大的游戏交互设计上。
精灵内容是通过在Sprite视图上展示场景来绘制的
动画和渲染由SKView对象执行。你在窗口(window)上放置SKVi ew对象,然后在其上渲染内容。因为它是一个View,它的内容可以由在View层次(view hierarchy)上的其他View组成。
游戏内容将会被组织成一个个的场景。场景是由SKScene对象表示的。一个场景持有精灵对象以及其他要被渲染的内容。场景同时实现每一帧的逻辑遗迹内容的处理。在任何一个指定的时间,视图(View)只能展示一个场景。但一个场景呗展示时,它的动画以及每一帧的逻辑自动被执行。
要使用SpriteKit来制作一个游戏,你或者继承SKScene类或者创建一个场景代理(scene delegate)来处理游戏相关的任务。举个栗子,你可以创建独立的scene类来显示主菜单、游戏界面以及游戏结束时展示的界面。你也可以在窗口中使用单独一个SKVi ew对象并切换不同的场景。当你切换场景时,你可以使用SKTransition类实现场景切换的动画效果。
节点树(Node Tree)定义展示在场景中的内容
SKScene是SKNode的子类,使用SpriteKit时,结点(Nodes)是所有内容的基本构建块,使用场景(scene)对象作为结点对象树(a tree of node objects)的根节点,场景以及它的各个子结点决定了显示的内容以及如何渲染它们。
每一个结点的位置都是由其父节点的坐标系统定义的。结点同时应用其他的属性作用于其内容以及其子节点的内容。例如,当结点旋转时,其子结点也跟着旋转。你可以使用结点树创建一个复杂的图片并通过更改顶端结点的属性来旋转、缩放以及渲染整个图片。
SKNode类并不做任何绘制的操作,可是它可以将其属性应用到它的子结点。任何一种可绘制的内容都是SpriteKit类的不同的子类的对象,其他的Node子类本身不会绘制任何内容,而只是改变其子结点的行为。例如,你可以使用SKEffectNode对象给其所有的子结点添加滤镜效果。通过精确控制结点树的结构,你可以决定每个结点渲染的先后顺序。
所有的结点都可以接收响应事件,承继自UIResponder或者NSResponder,因此你可以创建结点的子类并接收用户输入。视图类自动将响应链延伸到场景的结点树。
贴图(Textures)持有可重用的图像数据
贴图是用于渲染精灵的共享的图像。当你需要应用同一个图像到不同的精灵上去时,就可以使用贴图了。通常情况下通过载入保存在app bundle中的图片文件来创建贴图,然而,你也可以通过在运行时(runtime)通过载入其他资源来创建贴图,这些资源包括Core Graphics images甚至还可以渲染一个结点树倒一个贴图中。
SpriteKit通过处理用于加载贴图并使之可用于图像硬件的底层代码来简化贴图管理器。贴图管理器自动由SpriteKit管理。然而,如果你的游戏要使用大量的图片,你可以通过夺取贴图管理器的部分控制权以提高性能。通常,你可以明确告诉SpriteKit需要加载那些贴图。
贴图图册(Texture atlas)是在游戏中一起使用的一组相关的贴图。例如,你可以使用贴图图册制作精灵动画或者制作一个游戏关卡的背景地图,SpriteKit使用贴图图册来提高渲染的性能。
结点执行动作使内容动起来
通过执行动作(action)让场景动起来。每个动作都是一个由SKAction类定义的对象。你告诉姐带你执行动作。然后,当场景处理动画帧时,会执行动作。有些动作一个帧就完成了,有的动作需要跨度好多帧才能完成。动作的一个很通常的应用是改变结点的属性来进行动画。例如,创建动作移动结点,旋转结点,缩放结点,或者使其变透明。然而,动作还可以改变结点树,播放声音,以及执行自定义的代码
动作用处很大,你可以组合动作制作更复杂的效果。你可以创建一组同时执行的动作,或则依次执行的动作序列。你也可以让动作重复执行。
场景也可以自定义的逐帧执行。你可以通过重载Sence类的方法处理额外的任务。例如,当一个结点需要逐帧移动时,你可以在每一帧中改变它的属性而不是通过动作来完成。
在场景中添加刚体(Physics Bodies)以及关节来模拟物理
尽管你可以在场景中控制每一个结点的精确的位置,但更经常地是你想让这些结点可以相互作用,可以相互碰撞,相互之间有影响。你也想处理一些无法被动作处理的事情,比如模拟动力或者其他的一些作用力。为了做到这些,你需要在场景中添加刚体(SKPhysicsBody)并将其附加倒node上。每个刚体都是通过形状,大小,数量以及其他物理性质定义的。场景通过一个附加的SKPhysicsWorld对象定义了一个全局的特性进行物理模拟,你使用这个物理世界来模拟重力,速度等。
当刚体添加到场景中后,场景模拟这些刚体的物理特性,一些动力,比如摩擦力或者重力,都会自动应用。其他的动力可以自动的应用到一些SKFieldNode的刚体上。你也可以通过直接更改刚体的速率或者给它一个力直接推动它。刚体的加速度以及速率都是实时计算的并且这些刚体可以相互碰撞。然后,当模拟结束以后,结点的位置以及旋转角度等属性都会更新。
你可以精确控制这些刚体之间的相互作用。例如,你可以决定一个物理特性的结点只响应某几种刚体效果。你也可以决定那几个刚体之间可以相互碰撞,可以决定这种碰撞后会执行哪一个回调。你使用这些回调添加游戏逻辑。例如,你的游戏可能会摧毁一个结点,当另一个刚体打击它时。
你也可以使用物理世界在场景中寻找刚体并使用连接器(SKPhysicsJoint)将刚体连接起来。连接起来的刚体一起模拟,效果根据链接器的不同而不同。