好的,希望我不要过于复杂。我知道我可以使用timer.Enabled = false或timer.Stop()来停止计时器,但我想将一个属性合并到我的主播放器类中,这将控制计时器。例如,如果我的播放器具有“愈合”的bool属性,我希望当播放器的属性设置为愈合== true时,计时器开始,以及播放器.healing属性更改为愈合= = false,让计时器停止。这样做的原因是我希望我的主游戏循环继续运行,同时我的玩家继续玩游戏和治疗,当游戏中采取动作时,或当玩家达到完全健康状态时,计时器停下来。
目前我有一个运行每个计时器滴答的功能,并评估播放器是否完全健康,如果是,则停止计时器。但是,我只是认为能够将bool属性从false转换为true,反之亦然,会更有用。非常感谢任何帮助/想法/建议!
答案 0 :(得分:5)
属性设置器只是一个函数,所以非常简单:
private bool healing = false;
public bool Healing
{
get { return healing; }
set
{
healing = value;
if (healing)
timer.Start();
else
timer.Stop();
}
}
你想要小心属性设置器中的副作用,因为如果你实际希望逻辑在每个时间运行你设置值,那么你需要经历一个单独的功能:
public bool Healing { get; set; }
public void SetHealingWithTimer(bool status)
{
Healing = status;
if (Healing)
timer.Start();
else
timer.Stop();
}
答案 1 :(得分:2)
你不能这样做:
private Timer timer;
public bool Healing
{
get
{
return timer.Enabled;
}
set
{
timer.Enabled=value;
}
}
答案 2 :(得分:1)
在玩家处于完全健康状态后运行计时器没有任何问题。只是限制最大健康,即
if(health < maxHealth)
{
healing = true;
health += healthModifier;
}
else
{
healing = false;
}
//fix health meter, if above maximum
if(health > maxHealth)
{
health = maxHealth;
}
这也更灵活,因为您可能会在以后提供临时最大健康提升,这将取决于另一个计时器(例如)。