Play-clj屏幕和实体

时间:2015-12-03 03:32:32

标签: clojure play-clj

我是play-clj的新手,我对[screen entities]作为所有函数的参数感到困惑。我经历了tutorial,但我仍然没有得到它,所有这些函数共享参数是什么以及它们包含什么?我知道屏幕是一个地图(更精确的记录),包含主要功能的各种功能,权利是一个包含游戏中对象方面的向量。

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

1 个答案:

答案 0 :(得分:1)

嗯,问题很笼统,所以我会给出一般答案。如果您需要具体细节,请随时询问。

虽然play-clj支持功能游戏开发,但支持它的基本元素是Java类;以强制方式访问,设置和修改。这意味着你将使用play-clj引起大量的副作用。当你习惯使用Clojure时,有些行为可能会让你感觉不舒服,但它确实有道理。

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

另一方面,所有entities都将通过step!等函数尽可能正确对待(如果合适,应用物理,突变状态)或{{1 }}。它们是地图,它们的处理基于属性。 render!意味着,他们需要物理,:body意味着他们需要被绘制为原始,:shape等等,做你期望的事情,等等。您可以像往常一样添加其他属性并使用它们。

期望这两个参数的函数有一个共同点:如果你给它们一个返回值,游戏将这个返回值用作:x, :y, :width, :height - 从那个时间点开始的向量。所以,除非你想把这个可怜的玩家全部留在屏幕上,否则不要修改并返回一个实体......

另外,请务必阅读https://oakes.github.io/play-clj/处的文档,他们会解释很多。