我明白这不是 Swift 特有的,但我正在用 Swift 编写一个小游戏,因此我已经用相关标签标记了它。我对 Swift 语言很陌生,但很快就掌握了它,虽然对一般编程并不陌生,但经常质疑我的方法。
这是我的场景:
我正在编写一个带有玩家角色和各种障碍的小型 2D 平台游戏。玩家可以具有不同的纹理,但通常具有相同的能力,例如跳跃和冲刺。同样,障碍物通常具有不同的纹理,但在其他方面具有相同的功能。
角色和障碍物也具有共同的能力,但不是全部,例如障碍物不能跳跃。考虑到这一点,这就是我编写类(class)的方式......
class GameObject {
let node : SKSpriteNode!
}
Class GameObstacle: GameObject {
init() {
super.init()
}
func explode() {
// explode code
}
}
class GameCharacter: GameObject {
init() {
super.init()
}
func jump() {
// jump code
}
}
class GameCharacter_Sheep : GameCharacter {
init() {
super.init()
self.node = SKSpriteNode(namedFile: "sheep")
}
}
我这种方法背后的逻辑是,所有常见的对象功能都包含在 GameObject 类中,所有常见的角色功能(例如跳跃)都包含在角色类中,而独特的东西则包含在类级别中.
我有一个问题,在 GameCharacter_Sheep 类中初始化节点(在 GameObject 类中定义)是否正确?我的理由是,因为纹理以及物理主体因角色而异,所以这是执行实现的正确位置?
再次,我意识到这可能是基本的 OOP,并不是真正特定于 Swift,但我只是在寻找一些指导。
非常感谢, 乔恩
最佳答案
如果您的所有游戏对象都有一个 SKSpriteNode
实例,该实例从指定文件传递数据,您可以将其创建移动到基类中,然后将指定的文件传递到对 super.init()
的调用。
更一般地说,继承并不是在不同游戏对象之间共享功能的唯一选择。不要忘记组合,在定义游戏对象时通常会首选它,以避免深层、不灵活的继承层次结构,这种层次结构有时无法模拟所需的行为。有很多方法可以一直实现基于完整游戏对象组件的系统。
关于swift - 需要一些一般类(class)的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682947/