我正在寫一個Java 2D視頻遊戲。我只使用Java 2D api,並且所有更新都從單個更新計時器驅動。我使用paintComponent()在一個JPanel中執行所有的繪圖,並且從所讀取的所有圖形圖像使用易失性圖像應該會提高性能。在Java 2D視頻遊戲中閃爍的問題
儘管如此,有時我的視頻遊戲開始閃爍如瘋。整個屏幕開始閃爍。遊戲是用Java 6編寫的,而且我在Mac OS X 10.10.1上運行。
有關如何解決此問題的任何想法?
謝謝。
我正在寫一個Java 2D視頻遊戲。我只使用Java 2D api,並且所有更新都從單個更新計時器驅動。我使用paintComponent()在一個JPanel中執行所有的繪圖,並且從所讀取的所有圖形圖像使用易失性圖像應該會提高性能。在Java 2D視頻遊戲中閃爍的問題
儘管如此,有時我的視頻遊戲開始閃爍如瘋。整個屏幕開始閃爍。遊戲是用Java 6編寫的,而且我在Mac OS X 10.10.1上運行。
有關如何解決此問題的任何想法?
謝謝。
根據這個post你不應該直接調用paintComponent()。嘗試調用paint()來代替。
編輯:對不起,我困惑paintComponent()和paintComponents()。也許你可以顯示一些代碼?
還要確保不要經常調用paint()。只有當屏幕上的內容發生變化時才調用它,並且您需要更新繪製的畫布。通過直接調用'paintComponent()'或過度重新繪畫,你很可能會有一些閃爍。 – NoseKnowsAll
OP正在使用JPanel,它是一個Swing組件,因此**應該**重寫'paintComponent()'。這篇文章說,不要重寫'paintComponents()',它是與'paintComponent()'不同的方法。 – initramfs
從我讀過的東西中,應該調用paintComponent(),因爲我已經更新了一個JPanel,並且應該只在更新Canvas時調用paint()。我會給它一個旋轉,看看會發生什麼。 – user1104028
你經常打電話給你的油漆方法?你正在使用'repaint()'重新繪製你的面板嗎?還是你明確地調用'paintComponent()'? – initramfs
你能提供更多關於你在做什麼的細節嗎?爲什麼JPanel over JComponent(影響不透明度)?你可以重畫區域而不是整個組件嗎?你可以通過XOR繪製來消除重繪嗎?等等。 – Jeff
易揮發的圖像可能隨時消失,這可能導致閃爍,圖像由於某種原因而失效。考慮使用兼容的BufferedImage代替。我可能是錯的,但我認爲使用易失性映像現在不需要對總體渲染管線進行更改 – MadProgrammer