Я пишу клон тральщика с помощью 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!
/ обновление кнопки происходил сразу, даже если это создает небольшое количество воспринимаемой задержки?