1

私はゲームを支援するプログラムを書いています。現在の exp 値を表示するテキスト ボックスを更新する必要があります。フォーラムのロード時に exp が表示されます。like expeveryを更新する必要があり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

無限ループでバックグラウンド ワーカーにアクセスする場合はタイマーを使用することをお勧めしますが、バックグラウンド ワーカーを使用する場合は次の 2 つの点に注意する必要があります。

  1. メインスレッドから実行する必要があるため、テキストボックスまたはその他の UI の更新は機能しません。そのため、前に myTextbox.requireInvoke() 関数を確認する必要があります。
  2. バックグラウンド ワーカーがキャンセル信号を受信して​​無限ループが終了したかどうかを確認します。

反対側に。タイマーを使用してテキスト ボックスを更新すると、ある程度の時間がかかります。タイマーはウィンドウのイベント処理サイクルに移動し、イベントを発生させ、最後にタイマーイベントにコードを記述します。

于 2013-03-09T15:51:57.707 に答える