gpt4 book ai didi

Clojure 中的计时器?

转载 作者:行者123 更新时间:2023-12-03 00:35:16 25 4
gpt4 key购买 nike

我想知道是否有任何广泛的计时器解决方案。

我想编写一个简单的游戏引擎,它会每 20 毫秒处理一次用户输入(或在 20 毫秒(或任何其他时间段)之后执行一些操作),并基本上通过以下方式更新“全局”状态交易,而且我还计划使用 futures,因此该解决方案应该能够处理并发警告。

你能给我一些建议吗?

最佳答案

您实际上遇到了两个不同的问题。

首先是计时器的问题。您在这里有很多选择:

  • 启动一个在操作之间休眠的线程,例如 (future (loop [] (do-something) (Thread/sleep 20) (when (game-still-running) (recur))))
  • 使用 Java TimerTask - 从 Clojure 轻松调用
  • 使用像我的小实用程序那样的库 Task包括用于重复任务的 DSL
  • 使用您正在使用的任何游戏引擎的计时器功能 - 其中大多数提供了一些用于设置游戏循环的工具

我可能只使用简单的线程选项 - 它非常容易设置,并且如果您需要的话,以后也可以轻松破解更多功能。

第二个问题是处理游戏状态。这实际上是一个更棘手的问题,您需要围绕您正在制作的特定类型的游戏进行设计,所以我只给出几点建议:

  • 如果您的游戏状态是不可变的,那么您会获得很多优势:您的渲染代码可以在游戏更新计算下一个游戏状态时独立绘制当前游戏状态。不变性会带来一些性能成本,但如果你能让它发挥作用,并发优势是巨大的。我的两个迷你 Clojure 游戏(Ironclad 和 Alchemy)都使用这种方法
  • 您可能应该尝试将游戏状态存储在单个顶级变量中。我发现这比将游戏状态的不同部分分割到不同的变量上效果更好。这也意味着您实际上并不需要基于引用的事务:原子或代理通常可以解决问题。
  • 您可能想要实现一个需要由游戏状态更新函数按顺序处理的事件队列。如果您有多个并发事件源(例如玩家操作、计时器滴答、网络事件等),这一点尤其重要

关于Clojure 中的计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16385049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com