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 файл.