簡體   English   中英

Java Swing Timer循環速度變慢

[英]Java swing Timer loop slows down

因此,我正在嘗試使用Java中的Swing創建一個小型游戲。 我創建的游戲循環使用javax.swing計時器。 此計時器(通常)每5毫秒調用一次循環。

Timer tm = new Timer(5, this);
tm.start();

@Override
public void actionPerformed(ActionEvent e) {
    game.tick();
    repaint();
    revalidate();
}

我的代碼可能很沉重,因為它包含很多for循環,因此我並不奇怪這並不是每5毫秒一次地在循環中運行。 取而代之的是,它以穩定的160fps每秒流轉,至少在我的計算機上如此。 當我在弟弟的計算機上嘗試游戲時(較少的RAM),它最初以160fps的速度運行,但是大約2分鍾后,幀數下降到了穩定的60fps。

我個人發現,在相同的時間間隔內幀下降這么多,並在其余時間保持穩定是很奇怪的。

如果有人遇到類似問題並且知道是什么原因引起的,請告訴我。 提前致謝。 〜Krikke

您應該使用Timer.scheduleAtFixedRate方法而不是構造函數參數。

從文檔(重點是我的):

在固定速率執行中,相對於初始執行的計划執行時間來計划每個執行。 如果執行由於某種原因(例如垃圾回收或其他后台活動)而延遲,則將快速連續發生兩個或更多執行以“追上”。 從長遠來看,執行頻率將恰好是指定時間段的倒數 (假設Object.wait(long)底層的系統時鍾是准確的)。

如@HovercraftFullOfEels的評論中所述,您應該在Swing事件線程上進行任何Swing調用。 有關更多信息,請參見本教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM