在Clojure中建模游戏UI屏幕



我正在尝试使用Quil在Clojure中编写游戏。

(qc/defsketch sketch
  :title "My Game"
  :size [800 600]
  :setup #(qc/smooth)
  :draw draw
  :mouse-pressed mouse-pressed
  :key-pressed key-pressed)

(我可以使用(def position (atom 0))(swap! position inc)@position来制作一个移动的球,但我不知道如何缩放它。

请注意,我为草图提供了一个用于绘图(和输入处理程序)的函数。如果我只是做一个快速草图,一个draw功能就可以了。

但是在我的游戏中,我需要根据主菜单、说明、关卡选择器还是游戏是活动视图来绘制不同的东西。其中一些(主要是游戏视图)需要有与之关联的数据,这些数据将在每次抽奖中更新。

我该怎么做?我对Clojure的了解越多,我就越困惑。(每个视图是否应是满足协议的记录?它们应该存储为原子,还是应该存储为原子的内部状态?或者游戏模拟状态应该是一个单独的原子——除了我不希望它在激活游戏视图之前占用内存......这在OOP中很容易,但我想学习函数式编程。

更新

如果您对我最终做的事情感兴趣,请参阅迷你小齿轮。

博客文章 http://stevelosh.com/blog/2012/07/caves-of-clojure-02/描述了一个我认为在这里可以很好地工作的设计。游戏 UI 是记录的堆栈(向量)。在该博客文章中,他们没有实现协议,而是在UI类型(主屏幕,指令等)上调度draw-ui多方法。但是,您可以根据需要修改此设置。设计使用记录对状态进行建模。

请记住,并不总是需要达到引用类型(var,atom,ref,agent)来在Clojure中建模状态。

相关内容

  • 没有找到相关文章

最新更新