Sprite Kit编程指南(0):简介 编程
简介
关于Sprite Kit
重要提示: 这是API或开发技术的一个第一版文档。虽然本文档的技术准确性已被审阅过,但这还不是最终版本。这个苹果的机密信息仅用于适用的苹果开发者计划的注册会员。苹果公司提供这些机密信息来帮助你计划采用本文所述的技术和编程接口。此信息若有变动,根据这份文档实现的软件,应该用最终的操做系统软件和最终文档进行测试。本文档的新版本可能会与API或技术的将来种子一块儿提供。
Sprite Kit提供了一个图形渲染(rendering)和动画的基础,你可使用它让任意纹理(textured)图像或精灵动起来。Sprite Kit采用的是传统的渲染循环,容许在渲染前处理每一帧的内容。你的游戏肯定场景的内容,以及这些内容如何在每帧中变化。Sprite Kit作的工做,就是有效地利用图形硬件来渲染动画的帧。Sprite Kit优化到本质上容许对动画每一帧的任意修改。
Sprite Kit还提供了其余对游戏很是有用的功能,包括基本的声音播放支持和物理模拟。此外,Xcode中提供了内置的Sprite Kit支持,能够很容易地建立并在你的应用程序中使用复杂的特效和纹理图册(atlases)。这种框架和工具的组合,使Sprite Kit对于游戏和其余须要相似动画的应用程序是一个很好的选择。对于其余类型的用户界面动画,使用Core Animation代替。
概览
Sprite Kit在iOS和OS X可用。它使用主机设备提供的图形硬件,以高帧速率复合2D图像。Sprite Kit支持多种不一样类型的内容,包括:
• 无纹理或有纹理的矩形(精灵)
• 文本
• 任意基于CGPath的形状
• 视频
Sprite Kit还提供了裁剪和其它特效的支持,容许你对所有或者部份内容应用这些效果。你能够在每一帧中活动(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的游戏参见代码:Explained Adventure。