1

我正在编写一个程序来帮助玩游戏。我需要它来更新显示当前 exp 值的文本框,在论坛加载时它确实显示 exp,我需要它来更新exp每个3 seconds.

我该怎么做呢?

这是我到目前为止所拥有的:

        Client C = Client.GetClients()[0];
        Player P;
        P = C.GetPlayer();
        expTextBox.Text = ("Experience: " + P.Experience.ToString());

我不确定我是否需要一个timer(我已经尝试过,但我很不擅长制作)或者是否backGroundWorker是最好的。

4

2 回答 2

2

根据您的评论,我建议您在玩家攻击时更新您的 UI,而不是使用计时器。这将使您的 UI 保持最新,并且可能比 3 或 10 秒计时器更好地为您服务。你会有这样的方法:

public void Attack(Enemy e)
{
  //do your attack code

  //did the enemy die?
  KillEnemy();

  //add exp just for landing a successful attack
  AddExp(e);
}

public void AddExp(Enemy e)
{
  CurrentPlayer.Exp += e.ExperienceGain;

  //update the UI with the new exp
  GameWindow.ExperienceBox.Text = CurrentPlayer.Exp;
}

这当然是更多的伪代码,因为我不知道你的设计是什么样的,但我做了很多游戏,而且我总是这样做。

祝你好运!

于 2013-03-09T16:10:34.747 回答
0

如果您使用无限循环进入后台工作人员,我会鼓励您使用 Timer,但在使用后台工作人员时需要注意两件事:

  1. 更新文本框或任何其他 UI 将不起作用,因为它需要从主线程完成。所以你需要先检查 myTextbox.requireInvoke() 函数。
  2. 检查后台工作人员是否收到取消信号以存在无限循环。

另一方面。当您使用计时器更新文本框时,您会消耗一些时间。因为计时器将进入窗口中的事件处理周期,然后触发事件,最后您将在计时器事件中编写代码。

于 2013-03-09T15:51:57.707 回答