2013-03-09 149 views
1

我正在編寫一個程序來幫助遊戲。我需要它來更新顯示當前exp值的文本框,在論壇上它顯示exp,我需要它來更新exp3 seconds更新文本框

我該怎麼做呢?

這是我到目前爲止有:

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

我不知道如果我需要一個timer(我已經試過,我很不善於做),或者如果backGroundWorker將是最好的。

+1

爲什麼你需要每3秒更新一次經驗,他們是否經常獲得exp?如果沒有,看起來像是浪費更新的東西,直到它真的改變了? – 2013-03-09 15:47:08

+0

好吧不是3秒,而是一個固定值。我認爲10會很好。但是,他們會變得非常穩定。 – user2151847 2013-03-09 15:50:28

+0

最好的方法取決於你使用的UI平臺。它是什麼? asp.net,winforms等。 – Khan 2013-03-09 15:51:29

回答

0

我會鼓勵你,如果你去與無限循環是好的背景工人使用定時器,但你需要的時候使用背景的工作人員採取的兩件事情護理:

  1. 更新文本框或其他任何UI將無法正常工作,因爲它需要從主線程完成。所以你需要先檢查myTextbox.requireInvoke()函數。
  2. 檢查後臺工作人員是否有取消信號存在無限循環。

在另一邊。當您使用計時器更新文本框時,您將消耗一些時間。因爲計時器會進入窗口中的事件處理週期,然後觸發事件,最後您將在計時器事件中編寫代碼。

2

根據您的意見,我建議您在玩家進行攻擊時更新您的用戶界面,而不是使用計時器。這將使您的用戶界面保持最新狀態,並且可能會比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; 
} 

這當然更僞代碼,因爲我不知道你的設計看起來像,但我做了相當多的幾場比賽,這是我怎麼總是做它。

祝你好運!