【问题标题】:how can I write a boot script to load a quil/processing sketch?如何编写启动脚本来加载 quil/processing 草图?
【发布时间】:2017-03-02 02:05:59
【问题描述】:

我已经启动了其他示例,但我尝试将它与 quil/Processing 一起使用。 我编写了这个简单的脚本并尝试运行它,但它所做的只是启动一个 Java Applet 窗口,然后立即关闭。没有可供我调试的错误日志。

#!/usr/bin/env boot
(set-env! :dependencies '[[quil "2.6.0"]])
(require '[quil.core :as q])
(defn setup []
  (q/background 111 111 111 )  )
(defn -main  [& args]
  (q/defsketch my-art
  :size [800 800]
  :setup setup))

【问题讨论】:

  • 窗口创建完成后,JVM大概无事可做,退出。您是否尝试在调用q/defsketch 后添加(Thread/sleep 5000) 进行检查?
  • 在调用 defsketch 工作后添加睡眠,这在关闭前工作 5 秒。我认为通过使用绘图,它应该接管程序执行,因为它应该被连续调用。如果我不添加 sleep ,draw 中的 println 永远不会被调用。 main 中的 println 总是被调用。

标签: clojure leiningen boot-clj quil


【解决方案1】:

此代码有效,但它不是正确的答案,因为它使用睡眠。有没有更好的方法可以在不睡觉的情况下做到这一点?:

#!/usr/bin/env boot
(set-env! :dependencies '[[quil "2.6.0"]])
(require '[quil.core :as q])

(defn draw []
  (println "in draw")
  (q/background 111 111 111 )  )

(defn -main  [& args]
  (println "starting")
  (q/defsketch my-art
    :size [800 800]
    :draw draw)
  (Thread/sleep 5000))

【讨论】:

    【解决方案2】:

    创建窗口后,主线程可能无事可做,JVM退出。您可以通过在调用q/defsketch 后添加(Thread/sleep 5000) 来确认这一点。

    我快速浏览了quil 的代码。 defsketch 返回一个quil.Applet 的实例,它实现了processing.core.PApplet。尽管PApplet 在幕后使用 AWT,但它没有扩展或实现任何 AWT 类,但它在内部创建了其他处理类。

    保持窗口打开的最简单方法是在创建草图后使用(.read System/in) 从控制台读取。不过可能还有其他更好的方法。

    【讨论】:

      【解决方案3】:

      通常您希望将示例转换为启动任务,然后调用您的 quill 任务 + 监视任务以防止启动管道退出。

      即。 boot watch quill

      这将阻止启动在您的 quill 任务完成后退出,但是您可能需要根据 quill 的功能实现额外的控制流。

      【讨论】:

        猜你喜欢
        • 2013-09-08
        • 2023-03-30
        • 2021-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        相关资源
        最近更新 更多