需要一些一般的课程建议

时间:2015-11-12 22:52:41

标签: swift oop

我很欣赏这不是特定于Swift的,但我正在Swift中编写一个小游戏,因此我用相关标签标记了它。我是Swift语言的新手,但很快就把它拿起来,虽然对于一般的编程并不陌生,但是经常会质疑我的方法。

以下是我的情景:

我正在编写一个带有玩家角色和各种障碍的小型2D平台游戏。玩家可以拥有不同的纹理,但通常具有相同的功能,例如跳跃和冲刺。同样,障碍物通常具有不同的纹理,但是否则具有相同的能力。

角色和障碍物也有共同的能力,但不是全部,例如障碍物无法跳跃。考虑到这一点,这就是我编写课程的方式......

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,但我只是在寻找一些指导。

非常感谢, 乔恩

1 个答案:

答案 0 :(得分:0)

如果你的所有游戏对象都有一个SKSpriteNode实例从命名文件中传递数据,你可以将它的创建移动到基类中,只需要传递名为的文件进入super.init()的电话。

更一般地说,继承并不是在不同游戏对象之间共享功能的唯一选择。不要忘记组合,这在定义游戏对象时通常是首选,以避免深层,不灵活的继承层次结构,有时无法模拟所需的行为。有很多方法可以一直到达一个完整的基于游戏对象组件的系统。