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

本文关键字:计时器 属性 启用 | 更新日期: 2023-09-27 18:33:13

好的,希望我不会把这个问题复杂化。我知道我可以使用计时器。启用 = 假或计时器。Stop(( 停止计时器,但我想将一个属性合并到我的主播放器类中,该属性将控制计时器。例如,如果我的玩家有一个布尔属性"治疗",我希望当玩家的属性设置为治疗==true时,计时器开始,当player.healing 属性更改为治疗==false时,计时器停止。这样做的原因是,我希望我的主游戏循环继续运行,而我的玩家继续玩游戏和治疗,当游戏中执行操作或玩家达到完全生命值时,计时器停止。

目前,我有一个函数可以运行每个计时器滴答声,并评估播放器是否完全健康,如果是,则停止计时器。但是,我只是认为能够将布尔属性从假翻转为真,反之亦然,会更有用。任何帮助/想法/建议将不胜感激!

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

属性设置器只是一个函数,所以它非常简单:

private bool healing = false;
public bool Healing
{
     get { return healing; }
     set
     {
         healing = value;
         if (healing)
            timer.Start();
         else
            timer.Stop();
     }
}

您需要注意属性 setter 中的副作用,因为如果您实际上不希望每次设置值时都运行逻辑,则需要通过一个单独的函数:

public bool Healing { get; set; }
public void SetHealingWithTimer(bool status)
{
     Healing = status;
     if (Healing)
         timer.Start();
     else
         timer.Stop();
}

你不能这样做:

private Timer timer;
public bool Healing
{
    get
    {
        return timer.Enabled;
    }
    set
    {
        timer.Enabled=value;
    }
}

在玩家处于完全健康状态后运行计时器没有错。只是为了限制最大生命值,即

if(health < maxHealth)
{
    healing = true;
    health += healthModifier;
}
else
{       
    healing = false;        
}
//fix health meter, if above maximum
if(health > maxHealth)
{
    health = maxHealth;
}

这也更加灵活,因为您可以稍后提供临时的最大生命值提升,这将取决于另一个计时器(例如(。