代码之家  ›  专栏  ›  技术社区  ›  Steerpike

在游戏开发中处理战斗效果

  •  7
  • Steerpike  · 技术社区  · 17 年前

    Archon

    我遇到的问题是,构思出一种开发作战系统的最佳方法,我可以在一开始简单地实现,但这将允许在未来增加扩展性和复杂性。

    具体地说,我很难弄清楚如何处理战斗特效,也就是说,演员、物品或环境可以使用或移除的奖励或负面效果。

    • 如果游戏每次尝试决定性掷骰时检查每个武器、盔甲、演员和位置,我是否让演员处理所有对他们有利/不利的效果。
    • 是在单个对象中处理效果,还是存在“效果”对象或两者兼有?

    我可能根本没有在这里很好地解释我自己,如果我的要求过于宽泛和空泛,我非常乐意尝试扩展这个问题。但我最初的想法是,比我聪明的人已经花了时间和精力来解决这类问题,坦率地说,我不想过早地用我自己愚蠢的死胡同玷污对话。

    所讨论的语言是javascript,尽管在这一点上我不认为它有很大的区别。

    3 回复  |  直到 17 年前
        1
  •  7
  •   Kylotan    17 年前

    你称之为“特效”的东西过去被称为“修饰物”,但现在被称为MMO中流行的“buff”。考虑到您可以选择在每个阶段能够赋予多少变通能力,处理这些问题无论是简单还是困难都是您想要的。

    但从根本上说,系统的每个方面通常都存储一个适用于它的修改器列表,您可以根据需要查询它们。通常情况下,在任何给定的时间内,只有少数几个修饰符适用于任何一个玩家,所以这不是问题-获取玩家的统计数据和技能/法术/任何东西所赋予的修饰符,添加磨损装备所赋予的修饰符,然后添加相关武器所赋予的任何修饰符。如果您在这里提供了一个标准接口(例如sumModifiersTo(attributeID))供参与者、项目、位置等使用,那么实现这个接口可以很快很容易。

    通常,“效果”对象将包含在它们所属的实体中:演员有一个效果列表,他们穿戴或使用的物品有自己的效果列表。如果效果被明确激活和/或有时间限制,则由您决定存储它们的位置-例如,如果您有魔法药剂或其他消耗品,则需要将其效果附加到演员身上,而不是(可能已销毁)物品。

    不要试图让特效修改演员属性,因为你很快就会发现,如果你不能确保所有的添加和删除都按照正确的协议进行,那么属性很容易“漂移”。这也使得以后绕过某些修改器变得更加困难。想象一个魔法盾牌,它只保护你不受其他魔法的伤害——你可以传递某种谓词给你的修饰符求和函数,而忽略某些类型的效果。

        2
  •  2
  •   Rich.Carpenter    17 年前

    看看这本书, Head First Design Patterns ,作者伊丽莎白·弗里曼。具体来说,请阅读Decorator和Factory模式以及接口编程方法,而不是实现。我发现这本书非常有效地解释了一些复杂的概念,这些概念可能会让你继续写下去。

    希望这有助于为您指明正确的方向。

        3
  •  0
  •   John Munsch    17 年前

    乍一看,我想说的是,考虑到适用于该战斗员的所有修改器,单个战斗员(玩家和NPC)在确定其战斗特征(即护甲值、命中次数、伤害范围等)方面发挥着作用。因此,战斗系统不会试图弄清楚角色的职业是否会给他/她护甲加成,魔法武器是否会对他/她造成影响,等等。

    但我认为战斗系统本身不属于单个战斗人员。它将获取有关攻击者和所需攻击类型以及一个或多个目标的信息,并解决该问题。

    对我来说,这种模型反映了我们是如何在纸笔RPG游戏中进行战斗的。DM要求每位玩家提供其角色的详细信息,然后使用这些信息作为输入进行战斗。它在现实世界中运行表明它是一个相当灵活的系统。