跟踪X个对象之间的一个对象中的变量更改

时间:2014-01-11 08:15:27

标签: c++

我可以显示确切的代码(不幸的是),但这是我想要实现的目标,而我只是不知道从哪里开始。

我有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修改它时才更改。

任何指向正确的方向指向哪里开始寻找合适的解决方案将不胜感激!

1 个答案:

答案 0 :(得分:1)

由于您没有提供任何代码,我想我会用伪代码回答您的问题。

  1. 通过getter / setter函数访问Health。
  2. 每当调用setHealth(newVal)时,在所有AffectingObjs上调用一些东西来告诉他们Target的健康状况已被修改。如果您不想调用导致立即更改的对象,则将进行更改的对象传递给setHealth,并让setHealth仅在AffectingObjs中调用那些不是传入对象的对象。
  3. P.S。我不确定您为什么希望根据您的描述通知您的影响对象的更改。他们似乎应该在他们开始影响健康时扣除健康状况,并在他们完成后重新恢复健康状况。