2017-02-01 4 views
1

Ich möchte an einer Stelle zeichnen, indem Sie die Maus ziehen und die Linie an 3 Stellen um die Mitte der Leinwand gezeichnet, darunter eine unter dem Cursor selbst. Ich verwende folgenden Code, die drei Linien zeichnen sich aber keiner von ihnen ist unter dem Mauszeiger:Nicht zeichnen unter der Maus in "Verarbeitung"

void setup(){ 
    size(300, 300); } 

void draw() { 
    translate(width/2, height/2); 
    if(mousePressed) 
    for(int i=0; i<3; i++){ 
     line(width/2 -mouseX, height/2 -mouseY, 
      width/2 -pmouseX, height/2 -pmouseY); 
     rotate(2*PI/3); }} 

Wie kann ich diesen Code korrigieren, so dass eine Zeichnung rechts unter Mauszeigers und andere 2 gedreht werden entsprechend ?

+0

Nur ein Kopf hoch, es ist ein bisschen unhöflich, Fragen zu löschen, nachdem die Leute sich die Zeit nehmen, sie zu beantworten. Macht es weniger wahrscheinlich, dass Menschen Ihnen in Zukunft helfen werden. :( –

+0

Es war ein blöder Fehler, für den ein kurzer Kommentar ausreichend gewesen wäre. Ich versuchte jetzt zu sehen, ob ich es wiederherstellen könnte, aber es ist nicht mehr verfügbar. Ich habe viele Ihrer anderen Beiträge auch sehr nützlich gefunden. – rnso

Antwort

0

Sie müssen darüber nachdenken, wo Ihre Punkte in Bezug auf Ihre translate() und rotate() Anrufe sind.

Zuerst übersetzen Sie, so dass der Ursprung in der Mitte des Bildschirms statt in der oberen linken Ecke ist. Daher müssen alle Punkte relativ zur Mitte und nicht zur oberen linken Ecke sein.

Um dies zu debuggen, würde ich durch das Loswerden der for Schleife zu starten und einfach einen einzigen Punkt oder eine einzelne Linie zu zeichnen:

void setup() { 
    size(300, 300); 
} 

void draw() { 
    translate(width/2, height/2); 
    if (mousePressed) { 
    line(width/2 -mouseX, height/2 -mouseY, 
     width/2 -pmouseX, height/2 -pmouseY); 
    } 
} 

Sie werden sehen, dass diese ausgeschaltet ist, was bedeutet, dass Ihre Logik für die Berechnung der Position der Linie ist falsch. Sie können damit spielen, um ein Muster zu bemerken, und Sie können über einige Beispielpunkte nachdenken.

Der Mittelpunkt ist 150,150. Also, wenn die Maus bei 160,160 ist, welche Position sollten wir den Punkt zeichnen? Denken Sie daran, es ist relativ zu 150,150, so 160,160 wird 10,10.

Mit anderen Worten, wir subtrahieren das Zentrum von der Maus, um herauszufinden, wo der Punkt zu zeichnen ist.

Aber Ihr Code subtrahiert die Maus von der Mitte, die rückwärts ist.

Wenn Sie ähnliche Probleme in der Zukunft haben, empfehle ich dringend, den Prozess des Denkens von Beispielpunkten und herauszufinden, wo sie gehen sollten. Millimeterpapier ist dein bester Freund mit solchen Sachen.

Hinweis: Ich erkenne, dass Sie Ihren Code von meiner Antwort auf your other question basieren, also das ist mein schlechtes. Ich habe die Bestellung falsch verstanden, aber es war nicht wichtig in Ihrer anderen Frage, weil Sie 4 Mal übersetzt haben (so wurde der Mauszeiger trotzdem abgedeckt).

Verwandte Themen