使用类属性启用/禁用计时器
本文关键字:计时器 属性 启用 | 更新日期: 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;
}
这也更加灵活,因为您可以稍后提供临时的最大生命值提升,这将取决于另一个计时器(例如(。