【问题标题】:Modelling game UI screens in Clojure在 Clojure 中建模游戏 UI 屏幕
【发布时间】:2013-10-19 02:56:18
【问题描述】:

我正在尝试使用 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 中很容易,但我想学习函数式编程。

更新

如果您对我最终所做的事情感兴趣,请参阅Mini Pinions

【问题讨论】:

    标签: clojure functional-programming lisp state quil


    【解决方案1】:

    博文http://stevelosh.com/blog/2012/07/caves-of-clojure-02/ 描述了一种我认为可以很好用的设计。游戏 UI 是记录的堆栈(向量)。在那篇博客文章中,他们没有实现协议,而是在这种 UI(主屏幕、指令等)上调度 draw-ui 多方法。但是,您可以随意修改它。该设计使用记录来模拟状态。

    请记住,在 Clojure 中模拟状态并不总是需要使用引用类型(var、atom、ref、agent)。

    【讨论】:

      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      相关资源
      最近更新 更多