【发布时间】:2011-10-17 22:20:42
【问题描述】:
我有一个关于如何处理这种类层次结构的问题。层次结构与游戏有关,但我认为它足够笼统,可以通过 gamdev 来讨论。我想这种事情偶尔会出现,所以我很好奇可能的解决方案
我有一个名为 BaseCharacter 的基类,它在我的游戏中定义了一个角色。它包含所有基本统计数据、状态效果持有者、事件等,以具有基线特征。我的大部分游戏逻辑都在 BaseCharacter 的实体上运行,并在必要时进行强制转换。
从那里我继承了一个 Humanoid 类,它添加了必要的结构和方法来为角色添加设备(武器、盔甲等),最后我有一个 PlayableCharacter 类,它继承自 humanoid 并添加了诸如当前 EXP 之类的东西,可配置的能力结构等。
所以类结构很简单:
BaseCharacter--->Humanoid--->PlayableCharacter
这种结构非常适合定义玩家方面的角色,尽管我可能会决定进一步改进结构。我必须能够将“敌人”类添加到层次结构中。为了满足对敌人的要求,我需要添加一些与经验相关的数据结构/方法/击败敌人的点数,战利品表等。
问题是,我在哪里添加这些结构?将它们添加到 BaseCharacter 似乎是个坏主意,因为我基本上是在说每个角色都具有敌方实体所需的方法/数据结构。我考虑过启动一个单独的类流,最终看起来像这样:
BaseCharacter--->Humanoid--->PlayableCharacter
\---->Enemy--->EnemyHumanoid
Enemy 继承自 BaseCharacter。 EnemyHumanoid 将添加与从 BaseCharacter->Humanoid 继承的相同的方法/数据结构集。这可行,但意味着我不能将 EnemyHumanoid 转换为 Humanoid,尽管 EnemyHumanoid 满足 Humanoid 的要求。这也增加了冗余,因为我会让这两个继承添加完全相同的对象/方法集。
然后考虑使用一个名为 EnemyInterface 的单独类,并最终得到这样的继承层次结构:
BaseCharacter----->Humanoid----->PlayableCharacter
| |
V V
Enemy EnemyHumanoid
Enemy 和 EnemyHumanoid 都实现了 EnemyInterface。但是,我现在失去了 EnemyEnemyHumanoid 关系。我应该在这里使用多个 inehritance 吗? (是否有 EnemyHumanoid 从 Enemy 和 Humanoid 继承?)这被认为是不好的形式吗?有没有更合乎逻辑的方法来做到这一点?这里的例子很简单,但如果我最终将我的类层次结构拆分得更多,它只会变得更复杂。
任何帮助将不胜感激
【问题讨论】:
标签: c++ inheritance