0

我正在使用 Seesaw 编写扫雷克隆。对于雷区,我使用了一个简单grid-panel的按钮。我已经到了当你点击一个按钮时,它会填满网格来发现你点击的地方周围的所有空瓷砖。要“揭开瓷砖”,我只是禁用与瓷砖关联的按钮。

问题是,即使正在执行的任务并没有那么昂贵,它也会逐渐发现。随着时间的推移,它会随机更新网格周围的一些参差不齐的按钮,看起来真的很糟糕。我宁愿延迟一秒钟,也不愿让它在程序上禁用按钮。

这基本上是按钮单击处理程序:

(doseq [b buttons] ; Buttons are the grid cells
  (let [[tx ty] (sc/user-data b) ; The cell position is stored in the user data
        tile (b/get-tile-at board tx ty)] ; O(1) lookup

    (when (:uncovered? tile)
      (sc/invoke-later ; Because this chunk is actually being executed in a pool
        (sc/config! b :enabled? false)))))

由于这里没有什么昂贵的东西,似乎每次config!调用都会对按钮进行更改,并且按钮的外观会随着更改的发生而更新。

有没有办法让每次调用config!/button 更新都同时发生,即使它会产生少量的感知滞后?

4

1 回答 1

1

我不熟悉seesaw它的内部结构,但您想找到一种在 Swing 中使用双缓冲的方法。

另请参阅: https ://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html

于 2018-05-13T00:36:47.250 回答