2016-06-01 23 views
0

Ich möchte eine Form basierend auf der Eingabe eines Schiebereglers zeichnen. sehen Sie den Code unten:zeichnen Form bei Eingabe gibt unerwartetes Ergebnis, wie zu beheben?

import controlP5.*; 
ControlP5 cp5; 

int people = 5; 
int DMamt = 0; 
int peoplehis; 
Slider abc; 

PShape vorm; 

void setup() { 
    cp5 = new ControlP5(this); 
    size(displayWidth, displayHeight); 

    cp5.addSlider("people") 
    .setPosition(10,10) 
    .setWidth(400) 
    .setRange(0,20) 
    .setValue(0) 
    .setNumberOfTickMarks(20) 
    .setSliderMode(Slider.FIX) 
    ; 

    cp5.addSlider("DMamt") 
    .setPosition(450,10) 
    .setWidth(400) 
    .setRange(0,255) 
    .setValue(0) 
    .setNumberOfTickMarks(5) 
    .setSliderMode(Slider.FIX) 
    ; 

    vorm = createShape(); 
    frameRate(10); 
} 


void draw(){ 

    if(peoplehis != people){ 
    vorm.beginShape(); 
    vorm.fill(DMamt); 
    for(int i = 0; i <= people; i++){ 
     vorm.vertex(random(500), random(500)); 
    } 
    endShape(); 
    } 
    peoplehis = people; 

    shape(vorm, 100,100); 
} 

das erste Mal, dass ich den Regler Wert i erhalten eine Form mit der gewünschten Menge von Punkten. aber wenn ich den Slider-Wert nach dem ersten Mal ändere, wird der Wert des Sliders den Punkten hinzugefügt, die bereits gezeichnet wurden. aber ich will eine neue Form. die alte Form sollte weg sein. siehe unten für ein Beispiel:

erster Wert von Slider = 5 das gibt mir eine Form mit 5 Punkten (GREAT);

zweiten Wert von Silder = 12 das gibt mir eine Form mit 17 Punkten (nicht gut) i 12 Punkte wollen statt 17.

Wie kann ich das tun ?? Ich bin nicht sehr mit Code erfahren :(

+0

In Zukunft versuchen Sie bitte, eine [mcve] zur Verfügung zu stellen. Ihre Frage hat nichts mit ControlP5 zu tun, so dass Code nur extra ist. Versuchen Sie, so viel Code wie möglich zu codieren, damit wir Ihren Code leichter ausführen können. –

+0

Hast du das jemals herausgefunden? –

+0

Ja am Ende ging ich mit einem völlig anderen Ansatz und das hat funktioniert :) – FutureCake

Antwort

0

Eine Verarbeitung PShape von mehreren Formen bestehen, die Sie durch den Aufruf der beginShape(), vertex() und endShape() Funktionen mehrmals hinzufügen.

Wenn Sie nur wollen neu erstellen eine neue Form, anstatt mehrere Formen des Hinzufügens, dann rufen Sie die wieder createShape() Funktion mit einer neuen PShape Instanz zu beginnen. stellen Sie außerdem sicher, dass Sie klar aus vorhergehenden Rahmen durch die background() Funktion aufrufen.

Hier ist eine si Beispiel:

PShape shape; 

void setup() { 

    size(500, 500); 

    shape = createShape(); 
    frameRate(60); 
} 

void mousePressed(){ 
    shape = createShape(); 
    shape.beginShape(); 
    for(int i = 0; i < 3; i++){ 
    shape.vertex(random(width), random(height)); 
    } 
    shape.endShape(); 
} 

void draw(){ 
    background(0); 
    shape(shape, 0,0); 
}