【发布时间】:2018-05-26 14:31:52
【问题描述】:
我需要保持最多 X 个(可变数量)倒数计时器实例,每个实例都由用户添加,一旦其中一个达到 0,它就会调用一个函数,而其他计数器继续计数。 为此,我尝试为它们创建一个队列,但事实证明,我无法更改 foreach 中迭代变量的值:
public struct Debuff
{
public float Timer;
public int Stack;
public int MaxStack;
...
}
public Debuff Poisoned;
public void CalcDamage(...)
{
...
if (Poisoned.Stack < Poisoned.MaxStack)
{
Poisoned.Stack++;
PoisonStacksTimer.Enqueue(Poisoned.Timer);
InvokeRepeating("Poisoning", 0.1F, 1F);
}
else
{
PoisonStacksTimer.Dequeue();
PoisonStacksTimer.Enqueue(Poisoned.Timer);
}
}
public void Poisoning()
{
foreach(float PTimer in PoisonStacksTimer)
{
TakeDamage(Poisoned.DmgTranslate);
PTimer -= Time.deltaTime; // here lies at least one of the problems
if (PTimer <= 0)
{
Poisoned.Stack--;
PoisonStacksTimer.Dequeue();
CancelInvoke("Poisoning");
}
}
}
还有其他方法可以在队列中使用倒数计时器吗?或者也许是实现我目标的更好方法? 这是我第一次在这里提问,所以我希望我能清楚地解释我的问题。
【问题讨论】:
-
您是否在队列计时器计数时添加了更多内容?此外,我认为这是可能的,但可能不是实现这一目标的最佳方式。最好解释一下为什么要这样做以及它的用途,因为您最终可能会使用队列来执行此操作,只是发现这是完成此操作的最糟糕的方法。