Spritekit Gameplaykit:Xcode级别编辑器中的组件检查器?

时间:2017-06-19 15:49:23

标签: ios sprite-kit xcode8 gameplay-kit

在Xcode 8,sprite kit级别编辑器中,右侧面板中有一个组件检查器。是为了什么?

另外,当你创建一个新的spritekit项目时,你得到了这行代码,在GameViewController.swift的第26行:

// Copy gameplay related content over to the scene
sceneNode.entities = scene.entities

这些scene.entities在哪里? 如果它们不存在,为什么我们不能得到零和错误?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

SpriteKit场景编辑器中的组件编辑器是一种自动设置与您的SpriteKit场景匹配的GameplayKit组件(GKComponents)以及一个包含它们的对应GameplayKit Scene(GKScene)对象的方法。

如果使用GKScene(fileNamed:“ foo.sks”)加载SpriteKit场景,那么您将得到的是一个GKScene对象,该对象已预先配置为具有所有功能的SpriteKit场景(SKScene)。 SKNode在场景中设置了PLUS,并提供了一系列GKEntities,它们代表场景文件中的节点。这些实体中的每一个都有您为其中的节点定义的任何组件(它们是GKComponent对象),还有一个GKSKNodeComponent,可帮助将GameplayKit实体链接到SpriteKit节点。

您可以使用GKScene对象的“ rootNode”属性访问SKScene。您可以像对待对象一样对待该对象,就好像您已经用SKScene(fileNamed:“ foo.sks”)加载了场景一样,但是现在您还拥有GKScene,其中包含逻辑,行为指定对象,可以帮助组织更多对象。复杂的项目。

为什么不只是将组件附加到SKNodes?因为GameplayKit场景是抽象实体,所以不一定了解SpriteKit。确实,您可以将它们用于任何其他类型的显示(例如SceneKit)。它们仅提供实体组件系统的框架,但与游戏的显示方式无关。

因此,为了将它们结合在一起并使这些行为在Sprite Kit编辑器中可检查和可编辑,将放置此结构以将“逻辑”行为(GKEntity / GKComponent)与“显示”行为(SKNode)分开。 GKSKNodeComponent是将两者关联的“胶水”。

因此,这行:

sceneNode.entities = scene.entities

...只是给场景提供了GKScene中实体的“捷径”,大概是为了可以丢弃GKScene对象本身。它不是工作流的必要部分;更加方便。如果您只需要在场景中设置一些SKNodes属性,那很好,但是可能会打败更复杂项目的目的。在后一种情况下,最好在需要进入SpriteKit场景时,只保留GKScene对象并引用其rootNode。

有关更多信息,请参阅Apple开发者文档中的GameplayKit参考。

答案 1 :(得分:-1)

您可以在关卡编辑器中创建精灵,并在您的代码中引用它们。首先,转到关卡编辑器并创建一个精灵。打开关卡编辑器的属性检查器,并为您的精灵命名。喜欢“广场”。现在,在GameScene.swift中,为你的精灵添加一个属性:

var mySquare: SKNode!

然后,在didMove(to view:)中,您可以将您的属性连接到编辑器中的精灵,如下所示:

mySquare = childNode(withName: "square")

这应该让你开始。