swift - 需要一些一般类(class)的建议

标签 swift oop

我明白这不是 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/

相关文章:

swift - 快速计算分数

iPhone 到 iPhone 通信

matlab - 如何在 MATLAB 中正确实现工厂模式?

javascript - Obj ['var' ] 和 Obj.prototype.var 有区别吗?

ios - Swift NSJSONSerialization.JSONObjectWithData() 无法仅读取 "OK"字符串的数据

swift - 在 Swift 中编辑 TableView 时如何防止 segue 转换?

swift - 如何快速停止 Sprite 套件更新?

php - 如何使用类方法作为回调

javascript - 从构造上的参数设置任意对象属性

c# - 从不同来源聚合/收集的设计模式