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。
我一直在阅读有关在我正在制作的游戏中使用的划分函数的内容(使用实体组件设计)。我的问题与如何实现这个有关。
这个游戏使用了多个场景。在这些场景中,我发现我编写的代码多次执行基本相同的操作(例如,为角色设置动画的代码)。
所以我看到了这样的东西:
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。