游戏设计+对账功能迅速

问题描述:

我一直在阅读有关compartmentalizing功能,在游戏中,我正在做(使用实体组件设计)中使用。我的问题与如何实现这一点有关。游戏设计+对账功能迅速

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

所以我看到这样的事情:

func animateCharacter() { 

} 

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

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

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

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

我想SKScene文件之间共享(如在管理各种场景中的代码不同的文件)。 – illuminatedtype

+0

一个好的做法是尝试从你的场景中获取代码并将其转换为更具体的对象。如果你的代码目前处于场景级别,那么可能有一种方法可以将其重构。如果出于某种原因需要处于场景级别,则可以创建一个实现此功能的场景子类,并让所有其他场景从该场景继承。 – nathan