让我们来举两个例子:

第一例:Slay the Spire 中有一个 Vulnerable 机制,FF 中有一种状态效果会显示 "恢复损伤"。在这种情况下,我们需要创建一个处理管道,使其可以修改这个管道中的数据。这不是件容易的事,因为一旦你要处理的可能性很快就会变得无法管理。那么,我们应该怎么处理?

我的当前实现创建了各种类型事件,然后使用控制器管理事件的解析。这个控制器包含一个 EventListener,监听所有可能对事件有影响的属性,使得当存在这样的修饰符时,它会被注册到该监听器中并在捕获事件类型后被应用。但是,当你要处理每种可能的修饰时,这会变得非常复杂。

第二例:Mewgenics 中有一种技能,会使最新的一次伤害失效,而其他游戏则有一个按钮,会逆转最近一次动作。目前,我唯一能想到的方法是记住每个动作,但这会带来一个风险,即无法正确逆转并导致实际状态与本应逆转到的状态有所不同。或者,保存一个可以容易恢复的快照,但这看起来像一个沉重的任务。对于一些情况,比如回顾信息(“这只怪物在这场仗中攻击过吗?”“猫受到了多少伤害?”),我只能看起来是一个具体监听事件来设定标志,这与该技能是否存在无关。这看起来又像是很多工作和代码来实现小小的效果。

所以问题是:如何解决这些问题?如何建造一个不仅仅是“效果 - > 应用效果”,而且可以被游戏中的任何东西修改的系统?如何记住信息而不创建过多的无用数据和需要管理的标志?