SpriteKit官方翻译

OC SpriteKit 官方翻译

注:该文章来源来自苹果开发中心翻译而来

https://developer.apple.com/documentation/spritekit?language=objc

使用优化的动画系统,物理模拟和事件处理支持创建基于2D精灵的游戏。

概观

SpriteKit是一种图形渲染和动画基础结构,可用于为任意纹理图像设置动画,也称为精灵。 SpriteKit提供了一个传统的渲染循环,它在确定帧的内容和渲染帧之间交替。您可以确定框架的内容以及这些内容的更改方式。 SpriteKit使用图形硬件有效地渲染该帧。 SpriteKit针对应用任意动画或更改内容进行了优化。这种设计使SpriteKit更适合需要灵活处理动画的游戏和应用程序。

通过在Sprite视图中显示场景来绘制Sprite内容

动画和渲染由SKView对象执行。将此视图放在窗口中,然后将内容呈现给它。因为它是一个视图,所以它的内容可以与视图层次结构中的其他视图组合。

游戏中的内容被组织成场景,由SKScene对象表示。场景保存精灵和其他要渲染的内容。场景还实现了每帧逻辑和内容处理。在任何给定时间,视图呈现一个场景。只要呈现场景,就会自动执行其动画和每帧逻辑。

要使用SpriteKit创建游戏或应用程序,您可以继承SKScene类或创建场景委托以执行与游戏相关的主要任务。例如,您可以创建单独的场景类来显示主菜单,游戏玩法屏幕以及游戏结束后显示的内容。您可以在窗口中轻松使用单个SKView对象,并在不同场景之间切换。切换场景时,可以使用SKTransition类在两个场景之间进行动画处理。

节点树定义场景中出现的内容

SKScene类是SKNode类的后代。使用SpriteKit时,节点是所有内容的基本构建块,场景对象充当节点对象树的根节点。场景及其后代确定绘制哪些内容以及如何渲染它们。

每个节点的位置在其父节点定义的坐标系中指定。节点还将其他属性应用于其内容及其后代的内容。例如,当旋转节点时,它的所有后代也会旋转。您可以使用节点树构建复杂图像,然后通过调整最顶层节点的属性来旋转,缩放和混合整个图像。

SKNode类不绘制任何内容,但它将其属性应用于其后代。每种可绘制内容都由SpriteKit中的不同子类表示。其他一些节点子类不会绘制自己的内容,而是修改其后代的行为。例如,您可以使用SKEffectNode对象将Core Image过滤器应用于场景中的整个子树。通过精确控制节点树的结构,可以确定节点的呈现顺序。

所有节点对象都是响应器对象,从UIResponderNSResponder降序,因此您可以子类化任何节点类并创建接受用户输入的新类。视图类自动扩展响应者链以包括场景的节点树。

有关更多信息,请参阅SKNode参考。

纹理保存可重用的图形数据

表示为SKTexture对象的纹理是用于呈现精灵的共享图像。每当需要将相同的图像应用于多个精灵时,始终使用纹理。通常,您可以通过加载存储在应用包中的图像文件来创建纹理。但是,SpriteKit还可以在运行时从其他来源(包括Core Graphics图像)或甚至通过将节点树渲染到纹理中为您创建纹理。

SpriteKit通过处理加载纹理所需的低级代码并使其可用于图形硬件,简化了纹理管理。纹理管理由SpriteKit自动管理。但是,如果您的游戏使用大量图像,则可以通过控制部分过程来提高其性能。首先,通过明确告诉SpriteKit加载纹理来实现这一点。

纹理图集是一组在游戏中一起使用的相关纹理。例如,您可以使用纹理图集来存储动画角色所需的所有纹理或渲染游戏级别背景所需的所有图块。 SpriteKit使用纹理图集来提高渲染性能。

有关更多信息,请参阅SKTexture和SKTextureAtlas类参考。

节点执行操作以动画内容

场景的内容使用动作进行动画处理。每个动作都是一个由SKAction类定义的对象。您告诉节点执行操作。然后,当场景处理动画帧时,执行动作。某些操作在单帧动画中完成,而其他操作在完成之前应用多帧动画的更改。操作的最常见用途是为节点属性的更改设置动画。例如,您可以创建移动节点,缩放或旋转节点或使其透明的操作。但是,操作还可以更改节点树,播放声音,甚至执行自定义代码。

动作非常有用,但您也可以组合动作来创建更复杂的效果。您可以创建同时运行的操作组或按顺序运行操作的序列。您可以使操作自动重复。

场景还可以执行自定义每帧处理。您可以覆盖场景子类的方法以执行其他游戏任务。例如,如果需要每帧移动一个节点,则可以直接在每一帧调整其属性,而不是使用操作来执行此操作。

有关更多信息,请参阅SKAction参考。

添加物理实体和关节来模拟场景中的物理

虽然您可以控制场景中每个节点的确切位置,但通常您希望这些节点相互交互,相互碰撞并在过程中传递速度变化。您可能还希望执行操作系统未处理的操作,例如模拟重力和其他力。为此,您可以创建物理实体(SKPhysicsBody)并将它们附加到场景中的节点。每个物理主体由形状,大小,质量和其他物理特征来定义。场景定义了附加的SKPhysicsWorld对象中物理模拟的全局特征。您可以使用物理世界为整个模拟定义重力,并定义模拟的速度。

当物理实体包含在场景中时,场景模拟这些物体上的物理。一些力,例如摩擦力和重力,会自动应用。通过将SKFieldNode对象添加到场景,可以将其他力自动应用于多个物理实体。您还可以通过直接修改其速度或直接对其施加力或脉冲来直接影响特定的场体。计算每个物体的加速度和速度,并使物体相互碰撞。然后,在模拟完成之后,更新相应节点的位置和旋转。

您可以精确控制哪些物理效果相互作用。例如,您可以指定特定物理场节点仅影响场景中物理实体的子集。您还可以决定哪些物理实体可以相互冲突,并分别决定哪些交互会导致您的应用被调用。您可以使用这些回调来添加游戏逻辑。例如,当物理体被另一个物理体撞击时,你的游戏可能会破坏一个节点。

您还可以使用物理世界在场景中查找物理实体,并使用关节(SKPhysicsJoint)将物理实体连接在一起。根据关节的类型一起模拟连接体。

有关更多信息,请参阅模拟物理。

SpriteKit入门

SpriteKit将内容实现为节点的分层树结构。节点树由作为根节点的场景节点和提供内容的其他节点组成。处理场景的每个帧并将其渲染到视图。场景执行动作并模拟物理,这两者都改变​​了树的内容。然后使用SpriteKit有效地渲染场景。

要开始学习SpriteKit,您应该按照以下顺序查看这些类,然后再转到框架中的其他类:

SKView

SKScene

SKNode

SKSpriteNode

SKAction

SKPhysicsBody

创建你的第一个场景

SpriteKit内容放在窗口中,就像其他可视内容一样。 SpriteKit内容由SKView类呈现。 SKView对象呈现的内容称为场景,即SKScene对象。场景参与响应者链并具有使其适合游戏的其他功能。

由于SpriteKit内容由视图对象呈现,因此您可以将此视图与视图层次结构中的其他视图组合在一起。例如,您可以使用标准按钮控件并将它们放在SpriteKit视图上方。或者,您可以为精灵添加交互性以实现您自己的按钮;这个选择由你。稍后在本例中,您将看到如何在场景中实现交互性。

可以将SKView作为子项添加到UIView中,也可以通过故事板,使用自定义类或代码将视图控制器的视图显式转换为SceneKit视图。以下清单显示了如何覆盖视图控制器的viewDidLoad方法以将其视图强制转换为SKView:

清单1

将视图控制器的视图转换为SKView

override func viewDidLoad(){

super.viewDidLoad()

view = SKView()

}

var skView:SKView {

返回视图为!SKView

}

创建SpriteKit视图后,显示内容的下一步是创建场景。通常,您可以为所需的每个场景子类化SKScene,但是简单,下面的代码只是实例化视图所呈现的新场景对象:

清单2

创建和呈现场景

让scene = SKScene(大小:CGSize(宽度:1024,高度:768))

覆盖func viewWillAppear(_ animated:Bool){

skView.presentScene(场景)

}

要在SpriteKit中显示内容,相关节点将添加到场景或场景的子节点。此示例中显示标签的最后一步是创建SKLabelNode并将其添加到场景中:

清单3

向场景添加标签

let label = SKLabelNode(text:“SpriteKit”)

label.position = CGPoint(x:scene.size.width / 2,

y:scene.size.height / 2)

scene.addChild(标签)

在应用程序中显示SpriteKit内容

创建SpriteKit用于表示和显示内容的基本对象。

SKView

显示SpriteKit内容的对象。本内容由an提供

SKScene

对象。

SKScene

视图中显示的所有精灵工具箱对象的根节点。

SKNode

SKNode类是大多数SpriteKit内容的基本构建块。

SKViewDelegate

允许动态控制的方法

SKView

对象的渲染速度。

SKSceneDelegate

方法您的应用程序可以实现参与SpriteKit的动画循环。

绘制内容的节点

生成可以显示形状、纹理、图像和视频的可视化节点。

SKSpriteNode

绘制矩形纹理、图像或颜色的节点。

SKShapeNode

呈现由核心图形路径定义的图形的节点。

SKLabelNode

显示文本标签的节点。

SKVideoNode

显示视频内容的节点。

SKCropNode

一种节点,它遮罩由它的子节点绘制的像素,以便只将一些像素呈现给父节点的帧缓冲区。

SKReferenceNode

从其他节点的存档集合创建其子节点的节点。

使用纹理

使用这些类从可以在SpriteKit游戏或应用程序中使用的图像资产生成纹理。

SKTexture

在SpriteKit中使用的一种图像表示。

SKTextureAtlas

纹理的集合。

SKMutableTexture

可以动态更新内容的纹理。

瓷砖建筑材料

使用这些类创建具有tile的大型详细场景。与使用单个大图像作为背景或手动添加单个图像相比,平铺映射提供了更好的可管理性和更低的内存开销。SpriteKit的瓷砖可以排列在矩形,六角形或等距网格。

SKTileMapNode

用于呈现二维纹理精灵数组的节点。

SKTileDefinition

描述在平铺图中使用的单一平铺类型的类。

SKTileGroupRule

定义如何在映射中放置瓷砖的类。

SKTileGroup

一个类,它封装了一组相关的平铺定义,这些定义被设计成在平铺映射中拼凑在一起。

SKTileSet

一个类,该类包含在一个tile映射中可用的所有tile定义。

动画的内容

SpriteKit包含了丰富的对象选择,这些对象可以动画节点和场景之间的转换。节点动画可以改变节点的视觉外观,如位置或方向,也可以应用音频效果,如改变立体位置或应用混响。这些物体也可以运行逆运动学求解器和应用物理力。

SKAction

对象执行的对象

SKNode

改变其结构或内容。

SKTransition

SKTransition对象用于在a之间执行动画转换

SKScene

对象已经表示的

SKView

对象和新的传入场景。

约束节点

约束节点的位置或方向。

SKConstraint

限制节点位置或旋转的一种规范。

SKRange

范围的定义

CGFloat

值。

SKReachConstraints

求逆运动学时自由度的一种表示。

扭曲的节点

扭曲节点,以实现效果,如拉伸和挤压与翘曲几何。

SKWarpGeometry

对符合的节点变形的定义

SKWarpable。

SKWarpGeometryGrid

一种基于网格的节点变形定义

SKWarpable。

SKWarpable

对象的一种协议,该对象可以由

SKWarpGeometry。

相机和照明

控制场景的哪些部分被渲染,并为场景添加灯光和阴影。

SKCameraNode

控制摄像机移动、变焦和旋转的节点。

SKLightNode

在场景中添加灯光的节点。

播放音频

添加位置音频效果,如闭塞和混响。

SKAudioNode

向场景添加位置音频的节点。

物理模拟

在场景中模拟物理。使用这些对象来响应碰撞和接触事件,构建具有节点的系统,如大头针和弹簧,并施加力,如重力和磁力。

SpriteKit中的物理仿真是通过向场景中的节点添加物理实体来实现的。物理实体使用其节点的位置和方向来将自己置于仿真中。它利用节点的位置和方向将自己置于仿真中。每个物理实体都有其他特征来定义模拟如何在其上运行。这些包括物理对象的固有属性,如其质量和密度,以及施加于其上的属性,如其速度。这些特性定义了一个物体如何运动,它如何在模拟中受到力的影响,以及它如何响应与其他物理物体的碰撞。

每次场景计算一个新的动画帧时,它都会模拟力和碰撞对连接到节点树的物理实体的影响。它为每个物理物体计算最终的位置、方向和速度。然后,场景更新每个对应节点的位置和旋转。

要在游戏中使用物理,你需要:

将物理实体附加到节点树中的节点,并配置它们的物理属性。看到SKPhysicsBody。

定义场景物理模拟的全局特性,如重力。看到SKPhysicsWorld。

为了支持你的游戏玩法,在场景中设置物理物体的速度,或者对它们施加力或脉冲。参见SKFieldNode和SKPhysicsBody。

决定场景中的物理物体是否应该相互连接。参见SKPhysicsJoint和别在SKPhysicsBody上的属性。

定义场景中的物理物体相互接触时如何相互作用。看到SKPhysicsContactDelegate。

优化物理模拟,以限制必须执行的计算数量。

SpriteKit采用国际单位制,也被称为SI,或米千克秒制。如有需要,您可能需要在线查阅其他参考资料来了解SpriteKit使用的物理方程。

SKPhysicsWorld

封装场景物理模拟的对象。

SKPhysicsBody

向节点添加物理模拟的对象。

SKPhysicsContact

描述两个物理物体之间的接触。

SKPhysicsContactDelegate

方法你的应用程序可以实现响应时,物理实体接触。

SKPhysicsJoint

连接物理实体的对象的抽象超类。

SKPhysicsJointFixed

把两个物理物体固定在一起的关节。

SKPhysicsJointLimit

在两个物理物体之间施加最大距离的关节,就好像它们是由一根绳子连接起来的。

SKPhysicsJointPin

将两个物理物体固定在一起的关节,允许独立旋转。

SKPhysicsJointSliding

允许两个物理物体沿着一个轴滑动的关节。

SKPhysicsJointSpring

一种模拟连接两个物理物体的弹簧的关节。

SKFieldNode

将物理效果应用于场景的一部分的节点。

SKRegion

任意区域的定义。

vector_float3

用于执行物理计算的浮点向量类型。

粒子系统

创建高性能粒子系统来模拟流体、烟雾和火灾。

SKEmitterNode

创建和呈现粒子的节点。

SKKeyframeSequence

在不同时间(关键帧)指定的值之间执行插值的对象。

使用着色器

利用着色器的强大功能为节点和粒子系统添加自定义效果。

SKShader

一种对象,允许使用自定义OpenGL ES片段着色器呈现或筛选节点。

SKAttribute

与自定义着色器一起使用的动态每个节点数据的规范。

SKAttributeValue

与节点关联的动态着色器数据的容器。

SKUniform

用于统一着色器数据的容器。

与其他框架集成

将SpriteKit与SceneKit和Core Image等其他框架集成。

SKEffectNode

可以应用核心图像过滤器或

SKWarpGeometry

对儿童的扭曲。

SK3DNode

以2D图像呈现场景包场景的节点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容