使用class属性启用/禁用计时器

时间:2014-12-04 18:07:50

标签: c#

好的,希望我不要过于复杂。我知道我可以使用timer.Enabled = false或timer.Stop()来停止计时器,但我想将一个属性合并到我的主播放器类中,这将控制计时器。例如,如果我的播放器具有“愈合”的bool属性,我希望当播放器的属性设置为愈合== true时,计时器开始,以及播放器.healing属性更改为愈合= = false,让计时器停止。这样做的原因是我希望我的主游戏循环继续运行,同时我的玩家继续玩游戏和治疗,当游戏中采取动作时,或当玩家达到完全健康状态时,计时器停下来。

目前我有一个运行每个计时器滴答的功能,并评估播放器是否完全健康,如果是,则停止计时器。但是,我只是认为能够将bool属性从false转换为true,反之亦然,会更有用。非常感谢任何帮助/想法/建议!

3 个答案:

答案 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;
}

这也更灵活,因为您可能会在以后提供临时最大健康提升,这将取决于另一个计时器(例如)。