2015-12-03 50 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/,他們解釋了很多。