2016-07-31 8 views
-1

Ich versuche, meine erste einfache Grafik-App mit Quil zu schreiben. Im Moment versuche ich nur einen Punkt zu zeichnen, der sich diagonal über den Bildschirm bewegt.Quil beansprucht meine Zeichenfunktion hat 0 Argumente

(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) 

Das Problem ist, das Lauf zeigt nicht einen Punkt, und den folgenden Fehler wird immer wieder auf die Konsole ausgegeben:

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) 

Es ist zu sagen, dass meine draw-state Funktion 0 Argumente übernimmt, wenn es sollte 1. draw-state nimmt eindeutig 1 Argument obwohl.

Ich verstehe nicht, warum draw-state irgendwie in eine 0-arity-Funktion "umgewandelt" wird.

+0

Sie interpretieren die Fehlermeldung zurück; es bedeutet, dass Nullargumente bestanden wurden, wenn 1 arg erwartet wurde. –

+0

Ya. Meine Verwirrung rührte von der Tatsache her, dass das Beispiel, das ich betrachtete, eine Zeichenfunktion hat, die ein Argument nahm. Ich habe es gelöst, also werde ich eine Antwort posten. – Carcigenicate

+0

Downvoter, bitte erklären. – Carcigenicate

Antwort

0

Das Problem ist, ich habe nicht aktiviert "Fun (Ctional) Modus", so dass die Zeichenfunktion erwartet, um 0 Argumente zu nehmen, da der Status standardmäßig global verwaltet wird.

Dies funktioniert:

(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 
Verwandte Themen