在Clojure中渲染png图像序列

时间:2012-11-19 17:38:52

标签: clojure png rendering

如何创建窗口,其中所有内容都是使用png序列生成的动画?

我找不到适合这个主题的文章。或者如果我打算在Clojure中做一些小游戏,那么使用任何Java游戏引擎可能更好吗?你将用这个目标做什么?

1 个答案:

答案 0 :(得分:5)

让我们适应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)))

现在使用avatarref-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