2013-02-01 128 views
-1

我正在製作一個遊戲演示,其中只有電腦播放,但速度太快。我需要它來展示一切。如何減慢Java Swing應用程序

該程序使用while循環,它沒有任何支持事件偵聽器的事件。 它只需要電腦做出動作。

+2

'Thread.sleep'可以幫助你。 –

回答

3

您可以有後臺任務來觸發移動並在移動之間適當地等待。喜歡的東西:

Runnable moveTask = new Runnable() { 
    public void run() { 
     while (true) { 
      Thread.sleep(...); 
      SwingUtilities.invokeLater(theActualMoveHere()); 
     } 
    } 
} 
new Thread(moveTask).start(); 

您將需要添加一個止動裝置(通過中斷),可能閱歷的邏輯,但基本的思路應該工作。

作爲睡眠的替代方法,例如,您可以每x毫秒計劃一次Timer。請注意,Timer的分辨率不是很好,可能高達30ms,因此可能不夠準確。

0

您可以使用線程休眠方法等待X時間。有些事情:

Thread.sleep(4000); 

http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html

如果您需要循環一定數量的次每秒,你可以計算出每次迭代已使用時間,然後睡覺所需要的時間。例如:

boolean cont = true; 
long time0, timeForEach = 1000, time1 = System.currentTimeMillis(); 
while (cont) { 

// Do my things here. 

time0 = System.currentTimeMillis(); 
try { 
    if (timeForEach > time0-time1) { 
    Thread.sleep(timeForEach - (time0-time1)); 
    } 
} catch (InterruptedException e) { 
} 
time1 = time0; 

}

0

當我想在代碼事情慢下來,我通常使用定時器,睡眠或等待函數。 你可能有一個迭代/循環(for,while,in等)的函數,用於每一個動作或類似的東西。你可以在這樣一個循環的每次迭代之間放置時間。

另一種策略是讓計算機在向最終用戶展示之前生成所有要做的動作。然後,當你向用戶展示每一個動作時,你可以決定在一次動作上花費的時間是多少。