2011-09-27 120 views
3

我正在用Java編寫遊戲。而且,哦,不知道,我有性能問題。我對油漆本身進行了基準測試 - 在3毫秒的時間內進行1000次循環。遊戲邏輯甚至低於此。到現在爲止還挺好。但是我仍然遇到一個煩人的滯後:滾動時,縮放時,點擊時。當我放大並放置更多對象時,問題會變得更糟。但仍然 - 即使當我循環繪畫1000次滯後停留或多或少是相同的,所以不能這樣做。 我試圖把循環放在一個任務 - 仍然是一樣的。我嘗試暫停塗料之間的任務 - 仍然是一樣的。 動畫像絲綢一樣流暢運行(因爲幀率穩定且高,這很有意義)。那麼我怎樣纔能有條不紊地組織投入?把他們全部放在一個單獨的線程? 任何輸入,將不勝感激!Java遊戲滯後

+4

以3ms爲單位進行1000個循環。你確定?這是333000 fps。 – toto2

+2

當您「暫停塗料之間的任務」時,您確定沒有暫停整個Swing(或AWT)事件線程嗎? – toto2

+0

現在,你提到它333000fps聽起來有點多...肯定我得到了錯誤;) – julian

回答

9

聽起來好像你正在使用監聽器回調直接在UI更新正在完成的Swing Event Dispatch Thread上。您應該使用命令隊列,並在調用回調時將事件放入隊列中,並使用命令的性質,然後在與EDT沒有任何關係的主遊戲更新循環中使用它。

+0

我現在不能嘗試,但這實際上應該做的伎倆。謝謝! – julian

+1

試了一下,工作盧克魅力。百萬倍感謝你! – julian