Clojure – диалект языка программирования Lisp с функциональным программированием, написанный для JVM. Clojure поставляется с Java совместимостью, делая его способным использовать существующие мощные библиотеки в Java экосистеме. Существует несколько источников для разработки игр на Clojure языке, используя libGDX.
Этот статья предполагает, что у вас установлен Leiningen наряду со среднем уровнем знаний Clojure, или Lisp. Есть много хороших видео у ClojureTV на YouTube, в частности Clojure for Java Programmers (Part 2).
project.clj
Так как по умолчанию Leiningen Maven репозитории не содержат libGDX, нужно добавить его самостоятельно из Sonatype репозитория.
(defproject cljdx "0.1.0-SNAPSHOT" :description "FIXME: write description" :license {:name "Apache License, Version 2.0" :url "http://www.apache.org/licenses/LICENSE-2.0.html" :distribution :repo :comments "Same as LibGDX"} :dependencies [[org.clojure/clojure "1.5.1"] [com.badlogicgames.gdx/gdx "0.9.9-SNAPSHOT"] [com.badlogicgames.gdx/gdx-backend-lwjgl "0.9.9-SNAPSHOT"] [com.badlogicgames.gdx/gdx-platform "0.9.9-SNAPSHOT" :classifier "natives-desktop"]] :repositories [["sonatype" "https://oss.sonatype.org/content/repositories/snapshots/"]] :source-paths ["src/clojure"] :java-source-paths ["src/java"] :aot [cljdx.desktop-launcher] :main cljdx.desktop-launcher)
Код может быть переведен довольно простым способом:
здесь есть эквивалент Main.java, который мы назвали cljdx.desktop-launcher
(ns cljdx.desktop-launcher (:require [cljdx.core]) (:import [com.badlogic.gdx.backends.lwjgl LwjglApplication]) (:gen-class)) (defn -main [] (LwjglApplication. (cljdx.core.Game.) "cljdx" 800 600 true))
здесь реализация Screen интерфейса (представлена как cljdx.core
)
(ns cljdx.core (:import [com.badlogic.gdx Game Gdx Graphics Screen] [com.badlogic.gdx.graphics Color GL20] [com.badlogic.gdx.graphics.g2d BitmapFont] [com.badlogic.gdx.scenes.scene2d Stage] [com.badlogic.gdx.scenes.scene2d.ui Label Label$LabelStyle])) (gen-class :name cljdx.core.Game :extends com.badlogic.gdx.Game) (def main-screen (let [stage (atom nil)] (proxy [Screen] [] (show [] (reset! stage (Stage.)) (let [style (Label$LabelStyle. (BitmapFont.) (Color. 1 1 1 1)) label (Label. "Hello world!" style)] (.addActor @stage label))) (render [delta] (.glClearColor (Gdx/gl) 0 0 0 0) (.glClear (Gdx/gl) GL20/GL_COLOR_BUFFER_BIT) (doto @stage (.act delta) (.draw))) (dispose[]) (hide []) (pause []) (resize [w h]) (resume [])))) (defn -create [^Game this] (.setScreen this main-screen))
и вот весь необходимый код! Команда lein uberjar
сгенерирует необходимый работоспособный jar файл.