1

我是 play-clj 的新手,我[screen entities]对所有函数的参数感到困惑。我浏览了教程,但我认为仍然没有得到它,所有函数共享参数的这些是什么,它们包含什么?我知道屏幕是包含主要功能的各种功能的地图(更准确地说是记录),而实体是包含有关游戏中对象方面的向量。

实体和屏幕保持什么样的值,它们取决于我们定义的功能?如果有人能给我一些声明和例子,我将非常感激。

4

1 回答 1

2

好吧,这个问题很笼统,所以我将给出一个笼统的答案。如果您想了解具体细节,请随时询问。

尽管 play-clj 支持函数式游戏开发,但支持它的基本元素是 Java 类;以命令式的方式访问、设置和修改。这意味着使用 play-clj 会产生大量副作用。当您习惯了 Clojure 时,有些行为可能会让您感到无法控制,但这确实是有道理的。

尽管名称如此,但screen它包含完整 libGDX 引擎的自定义实例,即它包装了用于声音、图形、物理和资产管理的 Java 对象。它以一种命令式的方式发生变异,通过调用命令后跟一个 bang。例如(let [screen (update! screen :world (box-2d))] (...)),将为您的游戏添加一个 2d 物理引擎,该引擎将从该时间点开始存在,即使在您离开绑定之后也是如此。它的功能也可能使实体发生变异作为副作用,例如通过施加重力丢球。

entities另一方面,所有这些都将通过函数step!(如果适当的话,通过应用物理来改变render!它们的状态)或. 它们是地图,它们的处理基于属性。:body意味着,它们需要物理,:shape意味着它们需要被绘制为基元,:x, :y, :width, :height等等。做你所期望的,等等。您可以添加其他属性并照常使用它们。

期望这两个参数的函数有一个共同点:如果你给它们一个返回值,游戏会使用这个返回值作为entities那个时间点的 -vector。所以不要只修改并返回一个实体,除非你想把可怜的虫子一个人留在屏幕上......

还要确保阅读https://oakes.github.io/play-clj/上的文档,他们解释了很多。

于 2016-01-29T14:15:24.130 回答