2012-04-24 33 views
0

我開始學習線程並遇到問題。螺紋打分系統

我有一個評分系統,旨在將一個點添加到一個臨時的addedPoints變量,以向玩家顯示他們最近獲得的點數。然後在大約1秒後,應該將增加的分數添加到玩家分數中。

我的嘗試是這樣的:

public static void AddPoints(int points) 
{ 
    for (int i = 0; i < points; i++) 
    { 
     Thread addThread = new Thread(new ThreadStart(ThreadedPoint)); 
    } 
} 

private static void ThreadedPoint() 
{ 
    addedPoints += 1; 
    Thread.Sleep(1000); 
    score += 1; 
    addedPoints -= 1; 
} 

這有兩個問題。首先它只允許我爲每個線程添加1個非常不理想的點。其次它並不實際工作。既不增加積分也不分數更新。我怎樣才能解決這個問題?

+0

你是否必須使用線程(或想要學習)?否則,通過在調用線程上觸發的計時器可以更好地解決此問題。確切的細節取決於您使用的GUI系統。 – 2012-04-24 20:00:49

回答

8

你還沒有真正開始你的線程,這樣什麼都不會發生:

public static void AddPoints(int points) 
{ 
    for (int i = 0; i < points; i++) 
    { 
     Thread addThread = new Thread(new ThreadStart(ThreadedPoint)); 
     addThread.Start(); 
    } 
} 

在一次一次,而不是一個加入多點而言,你可以使用一個ParameterizedThreadStart代替:

public static void AddPoints(int points) 
{ 
    Thread addThread = new Thread(new ParameterizedThreadStart(ThreadedPoint)); 
    addThread.Start(points); //You may need a cast of points to Object here 
} 

private static void ThreadedPoint(Object data) 
{ 
    int points = (int)data; 
    addedPoints += points; 
    Thread.Sleep(1000); 
    score += points; 
    addedPoints -= points; 
} 
+0

謝謝,我不敢相信我忘了開始它...現在它工作。再次,謝謝。 – Runewake2 2012-04-24 20:28:57

0

如果要慢慢消耗點數,請將點傳遞給線程(請參閱How can I pass a parameter to a Java Thread?)並使用while循環消耗所有點(假設您將傳遞的參數存儲爲點)。

while(points > 0) { 
    points -=1; 
    addedPoints += 1; 
    Thread.Sleep(1000); 
    score += 1; 
    addedPoints -= 1; 
} 
2

除非你想了解你穿會更好重新設計你的商店以這樣一種方式,它並沒有需要延遲更新「最近獲得」的方式。

I.e.立即更新分數,並有單獨的字段,說什麼時候獲得最新分數,所以你可以隨時獲得分數,並用一些代碼找出「最近獲得的」信息。如果需要,你可以通過「最近獲得」來調整分數的顯示值。