首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quil声明我的绘图函数有0个参数

Quil声明我的绘图函数有0个参数
EN

Stack Overflow用户
提问于 2016-07-31 08:21:14
回答 1查看 103关注 0票数 0

我正在尝试使用Quil编写我的第一个简单的图形应用程序。现在,我只是想画一个在屏幕上对角线移动的点。

代码语言:javascript
复制
(ns quil-test.quil-first
 (:require [quil.core :as q])

 (:gen-class))

(defn setup-state []
  (q/frame-rate 60)
  {:x 0})

(defn update-state [s]
  (assoc s :x (q/frame-count)))

(defn draw-state [state]
  (let [x (:x state)]
    (q/stroke-weight 100)
    (q/point x x)))

(q/defsketch quil-first
             :size [500 500]
             :setup setup-state
             :update update-state
             :draw draw-state)

问题是,运行此命令不会显示一个点,并且以下错误将反复打印到控制台:

代码语言:javascript
复制
Exception in  :draw  function:  #error {
 :cause Wrong number of args (0) passed to: quil-first/draw-state
 :via
 [{:type clojure.lang.ArityException
   :message Wrong number of args (0) passed to: quil-first/draw-state
   :at [clojure.lang.AFn throwArity AFn.java 429]}]
 :trace
 [[clojure.lang.AFn throwArity AFn.java 429]
  [clojure.lang.AFn invoke AFn.java 28]
  [clojure.lang.Var invoke Var.java 375]
  [quil.middlewares.safe_fns$wrap_fn$fn__114 invoke safe_fns.clj 9]
  [quil.middlewares.bind_output$bind_output$iter__148__152$fn__153$fn__164 invoke bind_output.clj 21]
  [quil.applet$_draw invoke applet.clj 220]
  [quil.Applet draw nil -1]
  [processing.core.PApplet handleDraw PApplet.java 2402]
  [quil.Applet handleDraw nil -1]
  [processing.awt.PSurfaceAWT$12 callDraw PSurfaceAWT.java 1527]
  [processing.core.PSurfaceNone$AnimationThread run PSurfaceNone.java 316]]} 
stacktrace:  clojure.lang.ArityException: Wrong number of args (0) passed to: quil-first/draw-state
 at clojure.lang.AFn.throwArity (AFn.java:429)
    clojure.lang.AFn.invoke (AFn.java:28)
    clojure.lang.Var.invoke (Var.java:375)
    quil.middlewares.safe_fns$wrap_fn$fn__114.invoke (safe_fns.clj:9)
    quil.middlewares.bind_output$bind_output$iter__148__152$fn__153$fn__164.invoke (bind_output.clj:21)
    quil.applet$_draw.invoke (applet.clj:220)
    quil.Applet.draw (:-1)
    processing.core.PApplet.handleDraw (PApplet.java:2402)
    quil.Applet.handleDraw (:-1)
    processing.awt.PSurfaceAWT$12.callDraw (PSurfaceAWT.java:1527)
    processing.core.PSurfaceNone$AnimationThread.run (PSurfaceNone.java:316)

这说明我的draw-state函数有0个参数,而它应该有1个参数,而draw-state显然有1个参数。

我不明白为什么draw-state会以某种方式被“转换”成一个0参数函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-31 08:29:36

问题是我没有激活"fun(ctional)模式“,所以绘图函数应该接受0个参数,因为默认情况下状态是全局管理的。

这是可行的:

代码语言:javascript
复制
(ns quil-test.quil-first
 (:require [helpers.general-helpers :as g]
           [quil.core :as q]
           [quil.middleware :as m])

 (:gen-class))

(defn setup-state []
  (q/frame-rate 60)
  {:x 0})

(defn update-state [s]
  (g/update-with s :x (fn [_] (q/frame-count))))

(defn draw-state [state]
  (let [x (:x state)]
    (q/stroke-weight 100)
    (q/point x x)))

(q/defsketch quil-first
             :size [500 500]
             :setup setup-state
             :update update-state
             :draw draw-state
             :middleware [m/fun-mode]) ; Activate functional mode
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38679694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档