我想知道是否有广泛的计时器解决方案。
我想编写一个简单的游戏引擎,它会每20分钟处理一次用户输入(或者在 20ms(或任何其他时间段)后执行一些操作)并基本上通过以下方式更新“全局”状态事务,我也计划使用futures
,所以这个解决方案应该能够处理并发警告。
你能给我一个建议吗?
答案 0 :(得分:12)
这里你确实遇到了两个不同的问题。
首先是计时器的问题。你有很多选择:
(future (loop [] (do-something) (Thread/sleep 20) (when (game-still-running) (recur))))
我可能只是使用简单的线程选项 - 如果需要,它可以很容易地设置并在以后轻松破解更多功能。
第二个问题是处理游戏状态。这实际上是一个棘手的问题,你需要围绕你正在制作的特定类型的游戏进行设计,所以我只想提出几点建议:
答案 1 :(得分:7)
现在我认为核心/异步是一个不错的选择,因为
这是草图
(require '[clojure.core.async :refer [go-loop]])
(go-loop []
(do
(do-something ...)
(Thread/sleep 1000)
(recur))))
答案 2 :(得分:5)
此解决方案假设您在JVM上编写Clojure。 这样的事情可以奏效:
(import '(java.util TimerTask Timer))
(let [task (proxy [TimerTask] []
(run [] (println "Here we go!")))]
(. (new Timer) (schedule task (long 20))))