我正在尝试为我作为个人项目进行修补的游戏制定高级技术规范。这是一款回合制冒险游戏,可能最接近Archon。就我正在尝试做的事情而言。
我遇到的困难是概念化开发战斗系统的最佳方法,我一开始可以简单地实现,但将来会增加扩展和复杂性。
具体来说,我在尝试弄清楚如何处理战斗特效时遇到了麻烦,即可能由 Actor 、元素或环境应用或移除的奖励或负面影响。
- 如果游戏本身在每次尝试进行决定性掷骰时检查每个武器、盔甲、 Actor 和位置,我是否让 Actor 处理所有支持/反对他们的效果。
- 效果是在单个对象中处理还是有一个“效果”对象或两者都有?
我在这里可能没有很好地解释自己,如果我的要求过于宽泛和空泛,我很乐意尝试扩展问题。但我最初的想法是,比我聪明的人已经花时间和精力来弄清楚这样的事情,坦率地说,我不想过早地用我自己愚蠢的死胡同来玷污谈话。
有问题的语言是 javascript,虽然在这一点上我不认为它有很大的不同。
最佳答案
您所说的“特殊效果”过去被称为“修饰符”,但现在在 MMO 中被称为“增益”。考虑到您可以选择希望在每个阶段能够赋予多少多功能性,处理这些问题的难度随您的意愿而定。
但从根本上说,系统的每个方面通常都会存储适用于它的修饰符列表,您可以按需查询它们。通常,在任何给定时间只有少数修饰符适用于任何一个玩家,所以这不是问题 - 获取玩家的统计数据和技能/法术/任何东西赋予的任何修饰符,加上磨损设备赋予的任何修饰符,然后添加任何由有关武器传递的东西。如果您在这里想出一个标准接口(interface)(例如 sumModifiersTo(attributeID))供 Actor 、项目、位置等使用,那么实现它会非常简单快捷。
通常,“效果”对象将包含在它们所属的实体中: Actor 有一个效果列表,他们穿着或使用的元素有自己的效果列表。如果效果被明确激活和/或有时间限制,则由您决定将它们存储在何处 - 例如。如果您有魔法药水或其他消耗品,则需要将它们的效果附加到 Actor 而不是(可能已销毁的)元素。
不要试图让效果就地修改 Angular 色属性,因为您很快就会发现,如果您不确保所有添加和删除都按照正确的方式完成,属性很容易“漂移”协议(protocol)。这也使得以后绕过某些修饰符变得更加困难。例如。想象一个只保护其他魔法的魔法盾牌 - 您可以将某种谓词传递给您的修饰符总计函数,该函数忽略某些类型的效果来做到这一点。
关于javascript - 在游戏开发中处理战斗效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/829490/