我正在尝试更新"玩家的健康状况。"当"玩家"攻击目标。根据目标的回击伤害减少球员的生命值。
我的游戏类(标签所在的位置):
public partial class Game : Form
{
public static Wizard wizard;
public static Assasin assasin;
public Game()
{
InitializeComponent();
}
private void Battle_Click(object sender, EventArgs e)
{
Battle battle = new Battle();
battle.Show();
}
public void Game_Load(object sender, EventArgs e)
{
NameLabel.Text = HeroMaker.className;
if (HeroMaker.wizardChoosen)
{
wizard = new Wizard(HeroMaker.className);
HealthLabel.Text = wizard.Health.ToString();
DamageLabel.Text = wizard.AttackDamage.ToString();
HealthBar.Maximum = wizard.Health;
HealthBar.Value = wizard.Health;
}
}
}
我的战斗课(攻击发生时):
public partial class Battle : Form
{
Creature troll = CreaturesFactory.CreateCreature(CreatureType.Troll);
public Battle()
{
InitializeComponent();
}
private void AttackTroll_Click(object sender, EventArgs e)
{
Game.wizard.Health -= troll.ReturnDamage;
//TODO: Update the "HealthLabel value."
}
}
问题在于,当我攻击巨魔时,玩家的健康状况正在下降,但标签上没有更新。提前谢谢。
答案 0 :(得分:1)
您只需要更新标签:
private void AttackTroll_Click(object sender, EventArgs e)
{
Game.wizard.Health -= troll.ReturnDamage;
//TODO: Update the "HealthLabel value."
HealthLabel.Text = wizard.Health.ToString();
//any other things that need to be updated
}
您也可以像this question一样绑定标签值。
同样,您可以连接event
,例如OnWizardHealthChange
,以便在HP更改时更新标签值。这样,您就不需要记住在健康变化的任何地方添加HealthLabel.Text = wizard.Health.ToString();
。在我链接的问题中有一个例子。
编辑:
您可以尝试查看创建标签的代码隐藏,以查看其访问修饰符(是public
吗?)
或者,你可以试试这个:
Label healthLabel = (Label)Application.OpenForms["FormName"].Controls.OfType<Label>().First(x=> x.Name == "LabelName");
请注意,我还没有对它进行测试,但您应该能够至少使用此代码获取标签,然后在那里更新值。 Here是一个很好的讨论,可以用另一种形式访问控件(例如你的标签)。