2015-12-03 31 views
1

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

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

回答

1

那么,这个问题是相当普遍的,所以我会给出一个普遍的答案。如果你想要具体的细节,请随时询问。

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

尽管有这个名字,screen包含了一个完整的libGDX引擎的自定义实例,也就是它包装了用于声音,图形,物理和资产管理的Java对象。通过调用紧接着爆炸的命令,命令变得突变。 例如,(let [screen (update! screen :world (box-2d))] (...))会为您的游戏添加一个2d物理引擎,即使您离开绑定,该引擎也会从该时间点开始存在。其功能也可能会将实体变为副作用,例如通过应用重力来丢弃球。

所有在另一方面entities将得到视为正式地通过功能,如step!render!通过应用物理学,如果合适的突变它们的状态)。他们是地图,他们的处理是基于属性。 :body的意思是,他们需要物理,:shape意味着他们需要被绘制为一个基元,:x, :y, :width, :height等做你想要的,等等。您可以像往常一样添加其他属性并使用它们。

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

同时请务必阅读文档https://oakes.github.io/play-clj/,他们解释了很多。