2014-01-11 40 views
0

我可以显示确切的代码(不幸的是),但这里是我试图实现的事情,我只是不知道从哪里开始。跟踪X个对象之间的一个对象的变量变化

我有X数量的对象,使事情更容易我会假设其中有两个Obj5s和Obj10s。 也有对象目标。

目标具有单个属性Health = 100和存储Obj类型对象的数组。但最后一个并不重要(我认为)。

现在Obj5s和Obj10s都可以减少目标生命值(但同时可以有任意数量的对象影响目标健康)。

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时被推送,它们应该相应更新?还是应该两个objs不断查询值以检查它是否更改?

我已经尽早实施了最后一种方法,但它并没有像我期望的那样真正起作用。因为在每次查询后,数值也被更新了,所以我得到如下行为: 100 - 10 = 90; 90 - 10 = 80; 80 - 10 = 70; 等 重点是值应该在每个Obj上设置一次,并且只有在其他Obj修改时才会更改。

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

回答

1

既然你还没有提供任何代码,我想我会用伪代码来回答你的问题。

  1. 通过getter/setter函数使Health健康可用。
  2. 每当调用setHealth(newVal)时,都会调用所有AffectingObj上的某些东西来告诉他们目标的健康状况已被修改。如果您不想打电话是造成立即改变对象也再传给作出改变的对象中setHealth并有setHealth只调用AffectingObjs不在传递的对象的对象。

附:我不确定为什么你希望你的影响对象根据你的描述被通知变化。他们似乎应该在健康开始影响健康时扣除健康状况,并在健康完成后恢复健康状况。

+0

谢谢。事实上,它现在以这种方式工作,但它不够准确。如果其中两个同时应用,但持续时间不同,则持续时间较长的将使用不再为真的信息(健康不再由原来的值修改-20,因为那样做的对象,不是更长的时间存在),但第二个对象没有意识到这一点,并仍然使用它在创建时获取的值。 –

+0

并感谢您给小费。现在有点补丁工作,但现在我已经开始工作了。 –