关于Sprite Kit
重要提示: 这是API或开发技术的一个初版文档。虽然本文档的技术准确性已被审阅过,但这还不是最终版本。这个苹果的机密信息仅用于适用的苹果开发者计划的注册会员。苹果公司提供这些机密信息来帮助你计划采用本文所述的技术和编程接口。此信息如有变更,根据这份文档实现的软件,应该用最终的操作系统软件和最终文档进行测试。本文档的新版本可能会与API或技术的未来种子一起提供。
SpriteKit提供了一个图形渲染(rendering)和动画的基础,你可以使用它让任意纹理(textured)图像或精灵动起来。Sprite Kit采用的是传统的渲染循环,允许在渲染前处理每一帧的内容。你的游戏确定场景的内容,以及这些内容如何在每帧中变化。Sprite Kit做的工作,就是有效地利用图形硬件来渲染动画的帧。Sprite Kit优化到本质上允许对动画每一帧的任意修改。
SpriteKit还提供了其他对游戏非常有用的功能,包括基本的声音播放支持和物理模拟。此外,Xcode中提供了内置的Sprite Kit支持,可以很容易地创建并在你的应用程序中使用复杂的特效和纹理图册(atlases)。这种框架和工具的组合,使Sprite Kit对于游戏和其他需要类似动画的应用程序是一个很好的选择。对于其他类型的用户界面动画,使用Core Animation代替。
概览
SpriteKit在iOS和OS X可用。它使用主机设备提供的图形硬件,以高帧速率复合2D图像。Sprite Kit支持多种不同类型的内容,包括:
· 无纹理或有纹理的矩形(精灵)
· 文本
· 任意基于CGPath的形状
· 视频
SpriteKit还提供了裁剪和其它特效的支持,允许你对全部或者部分内容应用这些效果。你可以在每一帧中活动(animate)或者改变这些元素。你也可以附加物理主体到将这些元素,使他们正确地支持武装和碰撞。
通过支持丰富的渲染基础和处理所有低级别的工作来提交OpenGL的绘图命令,Sprite Kit允许你全神贯注解决更高层次的设计问题,并创造伟大的游戏。
在Sprite视图内由呈现场景绘制Sprite内容
动画和渲染由SKView
对象执行。你在一个窗口在放置这个视图,然后渲染它的内容。因为它是一个视图,所以它的内容可以结合在视图层次里的其它视图。
你的游戏中的内容会被组织成场景(scenes),用SKScene
对象代表它们。场景包含精灵和其他要渲染的内容。场景也实现了每帧的逻辑和内容处理。在任何给定的时间内,视图展示一个场景。只要一个场景被呈现出来,它的动画和每帧逻辑会自动执行。
要使用Sprite Kit创建一个游戏,你要创建一个或多个的SKScene
类的子类。例如,你可能会创建单独的场景类,用来分别显示主菜单、游戏画面和游戏结束后显示的内容。你可以很容易地在你的窗口中使用一个单一的SKView
对象并在不同场景之间进行过渡。
有关章节: “深入Sprite Kit”, “ 使用场景间过渡”, “ Sprite Kit最佳实践”
节点树定义出现在一个场景中的内容
SKScene
类实际上是SKNode
类的后代。节点是所有内容的基本构建块,而场景对象作为一个节点对象树的根节点。场景及其后代决定哪个内容被绘制以及它渲染的方式。
每个节点的位置在它的父节点定义的坐标系中指定。节点的内容的其他属性也适用于它后代的内容。例如,当一个节点是旋转,所有它的后代也跟着旋转。你可以使用节点树建立一个复杂的图像,然后通过调整最上层节点的属性旋转、缩放并融入整个图像。
SKNode
类绘制任何东西,但它对后代应用于它的属性。每一种可绘制内容 由Sprite Kit的不同子类表示。其他的节点子类不直接绘制内容,但修改它们后代的行为。例如,你可以在场景中使用一个SKEffectNode
对象对整个子树应用一个核心图像过滤器(Core Image filter)。通过精确控制节点树的结构,你确定节点的渲染顺序,让你可以在一个场景中布局(layer)复杂的图形效果。
所有节点对象都是响应者(responder)对象,派生(descending)自UIResponder
或NSResponder
,所以你可以继承任何节点类来创建接受用户输入的新类。视图类自动扩展响应链来包含场景的节点树。
相关章节: “使用精灵”, “ 构建场景”, “ 使用其他节点类型”
纹理保存可复用的图形数据
纹理是用来渲染精灵的共享图像。当你需要对多个精灵应用相同的图像时,总是使用纹理。通常你通过加载存储在你的应用程序bundle的图像文件来创建纹理。然而,Sprite Kit也可以在运行时从包括核心图形图像在内的其他来源为你创建纹理,或者甚至渲染把节点树成纹理。
Sprite Kit通过处理较低级别的代码需求来加载纹理和并让它们对图形硬件可用,来简化了纹理的管理。纹理管理由Sprite Kit自动管理。但是,如果你的游戏中使用了大量的图像,你可以通过控制部分的过程来提高性能。首先,你通过提示Sprite Kit纹理很快就需要来做这个。
纹理图册是在你的游戏中一起使用的一组相关的纹理。例如,你可以使用一个纹理图册存储让一个角色活动需要的所有纹理或渲染游戏设置级别的背景需要的所有瓷砖。Sprite Kit用纹理图册来提高渲染性能。
相关章节: “使用精灵”
动作在场景中由节点执行
使用动作(actions)让场景的内容活动起来。每一个动作都是一个对象,由SKAction
类定义。你来告诉节点执行动作。然后,当场景处理动画帧,动作就被执行。有些动作在一帧动画内完成,而另一些在完成前应用变化于多帧动画。动作最常见的用途是改变节点的属性。例如,你可以创建动作来移动、缩放或旋转节点,或使其透明。然而,动作也可以更改节点树、播放声音、甚至是执行自定义代码。
动作是非常有用的,但你也可以组合动作来创建更复杂的效果。你可以创建一组同时运行或顺序运行的动作。你可以让动作自动重复。
场景中也能执行自定义的每帧处理。覆盖你的场景子类的方法来执行额外的游戏任务。例如,如果一个节点需要每帧移动,你可能会直接每帧地调整其属性而不是使用一个动作来这样做。
相关章节: “添加操作到节点”, “ 高级场景处理”
添加物理主体和关节来在场景中模拟物理
虽然你可以控制场景中的每一个节点的确切位置,你经常想这些节点互相交流、碰撞并在这个过程中告知速度的变化。你可能还需要模拟重力和其他形式的加速度,这些都不在动作系统中处理的。要做到这一点,你可以创建物理主体(SKPhysicsBody
),并将它们附加到你场景中的节点上。每个物理主体由形状、尺寸质量和其他物理特性定义。
当场景中包含物理主体,场景就在这些主体上模拟物理。一些势力(forces),如重力和摩擦力,会自动应用。你也可以对物理主体调用方法来应用自己的势力。每个主体的加速度和速度会被计算,然后主体彼此碰撞。然后,模拟完成后,相应的节点的位置和旋转的被更新。
你物理主体的交互拥有精确的控制。你确定哪些主体被允许相互碰撞 并单独决定哪些交互可以被你的应用程序调用。这些回调允许你勾(hook)到物理模拟中创建其他的游戏逻辑。例如,在一个物理主体被另一个物理主体击中时,你的游戏可能会销毁一个节点。
场景在一个附加的SKPhysicsWorld
对象上定义了物理模拟的全局特性。你可以使用物理世界定义整个模拟的重力,定义模拟的速度,并在场景中查找物理主体。你还可以使用物理世界通过一个关节(SKPhysicsJoint
)把物理主体连接在一起。连接的主体根据关节的类型模拟在一起。
相关章节: “模拟物理”
如何使用本文档
阅读“深入Sprite Kit”获得实现Sprite Kit游戏的一个概述。然后通过其他章节学习关于Sprite Kit功能的细节。一些章节包含建议的练习,以帮助你开发你对Sprite Kit的理解。学习Sprite Kit的最好方法是实践;把一些精灵放到场景中并实验它们!
最后一章,“Sprite Kit最佳实践”,进入更详细的使用Sprite Kit设计游戏。
先决条件
在试图使用Sprite Kit创建一个游戏之前,你应该对应用程序开发的基础知识相当熟悉。
· 在iOS上,参见今天开始开发iOS应用程序。
· 在OS X上,参见今天开始开发Mac应用程序。
尤其的,你应该熟悉以下概念:
· 使用Xcode开发应用程序
· Objective-C语言,包括块(blocks)支持
· 视图和窗口系统
虽然本指南展示了许多有用的创建游戏的技术,它还不是一个完整的游戏设计或游戏开发指南。
参见
当你需要Sprite Kit框架的具体细节时,参见SpriteKit框架参考。
关于如何使用Xcode对Sprite Kit的内置支持的信息,参见纹理图册帮助和粒子发射器编辑器指南。
关于在SKSpriteNode
类的详细说明参见Sprite Tour。
要了解Sprite Kit中的物理系统,参见SpriteKit物理碰撞。
要深入了解基于Sprite Kit的游戏参见 代码:ExplainedAdventure 。