swift 中的游戏设计 + 跨场景协调功能

Game design + reconciling functions across scenes in swift

我一直在阅读有关在我正在制作的游戏中使用的划分函数的内容(使用实体组件设计)。我的问题与如何实现这个有关。

这个游戏使用了多个场景。在这些场景中,我发现我编写的代码多次执行基本相同的操作(例如,为角色设置动画的代码)。

所以我看到了这样的东西:

func animateCharacter() {

}

...多次跨越与每个场景关联的各种文件。

在一个场景中一次编写一个函数,然后在其他场景中共享它的正确方法是什么?有什么方法可以做到这一点吗?

如果 animateCharacter 函数为特定节点设置动画,您可以将其包含在该节点的子类中。

class CharacterNode: SCNNode {
    func animateCharacter() {
        // ...
    }
}

那么无论你在哪个场景,都可以在节点上调用这个方法

myCharacterNode.animateCharacter()

如果你想在多个不同的节点子类之间共享这个行为,你可以使用协议。 (您也可以使用传统继承,所有可动画节点都继承自某个超类,但您提到您想改用实体组件设计。)

首先声明定义要共享的方法和属性的协议。

protocol Animatable {
    func animateCharacter()
}

然后在扩展中你可以提供一个默认实现:

extension Animatable where Self: SCNNode {
    func animateCharacter() {
        // default implementation here
    }
}

要使您的对象符合此协议并采用此行为,请在扩展中添加它们的一致性。

extension CharacterNode: Animatable {}
extension OtherCharacterNode: Animatable {}

事实证明,当我正确实现 GameKit(例如,在多个场景中使用一个视图控制器)时,这个问题得到了解决。之前的评论中有人帮我做了这个,之后我将所有其他场景都设为初始场景的子class,并使用了原始场景中的功能class。