我正在使用 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 更新都同时发生,即使它会产生少量的感知滞后?