1
如何创建窗口的所有内容都是用png序列生成的动画?在Clojure中渲染png图像序列
我找不到任何适合此主题的文章。或者如果我打算在Clojure上做一些小游戏,也许它会更好地使用任何Java游戏引擎?你会用什么来实现这个目标?
如何创建窗口的所有内容都是用png序列生成的动画?在Clojure中渲染png图像序列
我找不到任何适合此主题的文章。或者如果我打算在Clojure上做一些小游戏,也许它会更好地使用任何Java游戏引擎?你会用什么来实现这个目标?
让我们来适应an example from Wikibooks。
(import '(javax.swing JFrame JPanel)
'(java.awt Dimension Toolkit)
'(java.net URL))
(def url
(URL. "http://www.gravatar.com/avatar/70fa7ca20ce9cbf4c97bb9538034cef7?s=200&d=identicon&r=PG"))
(def avatar
(ref (-> (Toolkit/getDefaultToolkit) (.getImage url))))
(defn image
[]
@avatar)
(defn make-panel []
(let [panel (proxy [JPanel] []
(paintComponent [g]
(.drawImage g (image) 0 0 this)))]
(doto panel
(.setPreferredSize (Dimension. 200 200)))))
(defn make-frame [panel]
(doto (new JFrame)
(.add panel)
.pack
.show))
(def frame
(make-frame (make-panel)))
现在更新avatar
裁判使用ref-set
一个新的形象。记得在之后重新画框。
(dosync
(ref-set avatar (-> (Toolkit/getDefaultToolkit) (.getImage "image.png"))))
(.repaint frame)
现在让我们给它制作动画。
(def images
(cycle (map #(-> (Toolkit/getDefaultToolkit) (.getImage %))
["1.png" "2.png" "3.png"])))
(loop [coll images]
(when (.isVisible frame)
(dosync (ref-set avatar (first coll)))
(.repaint frame)
(Thread/sleep 100)
(recur (rest coll))))
我希望这是足够多的让你开始。
说到Java生态系统的游戏引擎,你可能想看看lwjgl。
非常感谢。工作正常。 – proofit404
http://stackoverflow.com/questions/233171/what-is-the-best-way-to-do-guis-in-clojure? – noahlz
它比gui编程更关于微不足道的游戏。 – proofit404