我可以显示确切的代码(不幸的是),但这是我想要实现的目标,而我只是不知道从哪里开始。
我有X个对象,为了让事情变得更容易,我会假设有两个Obj5s和Obj10s。 还有对象Target。
Target具有单个属性Health = 100和存储Obj类型对象的Array。但最后一个并不重要(我认为)。
现在Obj5s和Obj10s都降低了目标生命值(但同时可以有任意数量的对象影响Target Health)。
Obj5s减少20秒,持续5秒。 Obj10s减少10秒,持续10秒。
现在两个对象同时被应用到目标,因此目标健康应该是: 100 - 20 - 10 = 70 它应该持续5秒。
5秒后,健康状况会更新。 Obj5s被删除,它回到100. Obj10s收到此信息,它看起来像这样: 100 - 10 = 90; 再过5秒。 之后它将回到100。
类是pesudocode
class Target
{
float Health;
Array<Obj*> AffectingObjs;
}
class Obj
{
float Damage;
float Duration;
}
class Obj5s : Obj /it sets values
{
Damage = 20;
Duration = 5;
}
代码实际上是在游戏循环中运行。
现在我的问题是,如何让Obj5s和Obj10s以及任何其他ObjX知道健康变化?
每次改变为Obj时是否应该推送健康值,他们应该相应更新?或者两个obj都应该不断地查询值以检查它是否发生变化?
我早期实施了最后一种方法,但它没有像我预期的那样真正发挥作用。因为在每个查询之后,值也被更新,所以我得到的行为如下: 100 - 10 = 90; 90 - 10 = 80; 80 - 10 = 70; 等等 关键是应该在每个Obj上设置一次值,并且仅在其他Obj修改它时才更改。
任何指向正确的方向指向哪里开始寻找合适的解决方案将不胜感激!
答案 0 :(得分:1)
由于您没有提供任何代码,我想我会用伪代码回答您的问题。
P.S。我不确定您为什么希望根据您的描述通知您的影响对象的更改。他们似乎应该在他们开始影响健康时扣除健康状况,并在他们完成后重新恢复健康状况。