【问题标题】:Updating Text Box更新文本框
【发布时间】:2013-03-09 15:44:53
【问题描述】:

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

我该怎么做呢?

这是我目前所拥有的:

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

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

【问题讨论】:

  • 为什么需要每3秒更新一次经验,他们是在不断地获得经验吗?如果没有,在它真正改变之前更新一些东西似乎是一种浪费?
  • 嗯,不一定是 3 秒,而是一个恒定值。我觉得10个就好了。但是是的,他们会得到相当稳定的 exp。
  • 最佳方法取决于您使用的 UI 平台。它是什么? asp.net、winforms 等。
  • 是的,但他们是根据某些事件获得经验,还是自动发生?如果它基于预先存在的事件,则使用这些事件,而不是计时器。这真的取决于他们如何获得经验,你应该更新 UI。
  • 计划是让他们在攻击时获得经验。我正在使用 Windows 窗体应用程序。现在事件没什么,是他们在游戏客户端攻击

标签: c# winforms timer backgroundworker


【解决方案1】:

根据您的 cmets,我建议您在玩家攻击时更新 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;
}

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

祝你好运!

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-31
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多