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

时间:2017-08-24 13:38:53

标签: ios swift sprite-kit scenekit gamekit

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

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

所以我看到这样的事情:

func animateCharacter() {

}

...在与每个场景相关联的各种文件中多次。

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

2 个答案:

答案 0 :(得分:0)

如果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 {}

答案 1 :(得分:0)

事实证明,当我正确实现GameKit时(例如,在多个场景中使用一个视图控制器),此问题已被排序。之前评论中的某人帮助我这样做,之后我创建了一个初始场景的所有其他场景子类,并在原始类中使用了该函数。