[英]Java Swing heavy/slow paintComponent - any advice?
我正在制作一個滾動的2D地圖/平鋪游戲。 每個圖塊(存儲為圖塊[21] [11] - 每個圖總共231個圖塊)最多可包含21個值(存儲為int [3] [7])。 全屏時我一次看到大約8張地圖。
平均而言,每個地圖繪制大約需要0.03秒(使用System.nanoTime找到)。 問題是,只要屏幕上有多個地圖,Swing事件輪詢就會明顯變慢。
這有什么解決方案嗎? 我無法一次繪制地圖以將其保存為圖像,因為它具有涉及移動演員的透明度,因此它變化太頻繁。 另外我不認為我可以在paintComponent中調用一個線程來繪制地圖而不會出現故障,但我並不積極。
我的
Tiles
不是任何類型的JComponent
,它們只是數據。 我將其容器稱為MapPane
,它在paintComponent
繪制所有切片。
同樣, JTable
單元格只是在JComponent
呈現的數據; 這里提到的flyweight模式仍然適用:目標是省略任何渲染不可見單元格的工作。 剖析和自我時間 ,以優化渲染; 在這里引用的KineticModel
中檢查了一些方法。
不需要縮放的BufferedImage
是最好的。 如果必須縮放,請嘗試與插值類型相關的RenderingHints
。 如果合成太貴,可以使用SwingWorker
在后台構建地圖; publish()
他們,因為他們變得可用和process()
他們在EDT,如圖所示這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.