我有一个非常大的DamageEvent类,其包含了每当任何实体受到伤害时,生成的所有数据。这个DamageEvent通过一些静态事件和“Damageable”类中的某些事件传递。
很多项目订阅了这些事件,以便听到什么事情发生,例如游戏“Risk of Rain”项目可以修改伤害值、创建新的额外损伤事件等。
所以,最终所有这些数据都需要通过引用传递,以便所有项目都可以读取相同的数据并修改它们。
例如:一个项目可以增加造成的伤害值的50%,您将订阅onDamageDealt静态方法,使用玩家游戏对象作为键。每当您造成伤害时,读取损伤事件并将1.5乘数添加到损伤乘数中,然后通过某些其他事件后,被损坏的 damageable 接受伤害。
顺便说一句,这个类只活一帧。
但是在某些项目可能需要存储它……
我有一些选项,但并没有太确信。
A- 保留当前状态:这将生成大量垃圾,因为损伤事件被创建了很多。
B- 使它成为一个结构:这是非常糟糕的,因为它会被传递得很多,所以很多值会被复制;结构里包含列表并不是一个很好的想法,很容易混淆。
C- 池化:我可以池化它,似乎这是最有效的解决方案,但问题在于如何告诉自己或给出提示,表示这个类不应该被存储,因为数据可能会变化,当它从池中取出并再次使用时。
我可以当然提供一个复制方法来使项目可以存储信息……但这并不表明类不应该被存储当通过事件传递时。
D- 结构通过引用传递:我还没有真正调查或使用过这个选项,所以请校正我,如果我是错的:
我可以使它成为一个结构并通过引用传递。我当然包含一个列表,来避免项目在另外一个项目触发时触发无限循环,但让我们不就此停,它会变得更复杂(Risk of Rain的proc链)。
这样可以使你可以存储一个引用并且避免一个非常大的垃圾回收,而不仅仅是列表。
E- ?? – 我似乎可以通过“某种方式”在这种情况下给出一个警告,如果尝试存储这个类,但我并不知道如果可以这样干不。
总之我似乎还需要更多时间来决定怎么做,而且我也想从其他人那里得到更多的建议。
评论 (0)