【问题标题】:Need some general classes advice需要一些一般课程的建议
【发布时间】:2015-11-13 07:01:29
【问题描述】:

我很欣赏这不是 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 的,但我只是在寻找一些指导。

非常感谢, 乔恩

【问题讨论】:

    标签: swift oop


    【解决方案1】:

    如果您的所有游戏对象都将有一个 SKSpriteNode 的实例,该实例从命名文件传递数据,您可以将其创建移动到基类中,并将命名文件传递到对 @987654322 的调用中@。

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

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多