我一直在阅读有关在游戏中使用的功能的划分,我正在制作(使用实体组件设计)。我的问题与如何实现这个问题有关。
此游戏使用多个场景。在这些场景中,我发现我编写的代码多次执行大致相同的操作(例如,为角色设置动画的代码)。
所以我看到这样的事情:
func animateCharacter() {
}
...在与每个场景相关联的各种文件中多次。
在场景中编写一次函数,然后在其他场景中共享它的正确方法是什么?有没有办法做到这一点?
答案 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时(例如,在多个场景中使用一个视图控制器),此问题已被排序。之前评论中的某人帮助我这样做,之后我创建了一个初始场景的所有其他场景子类,并在原始类中使用了该函数。