2017-09-16 4 views
2

Ist es möglich, die function draw(){} in einer P5 js Skizze beim Klicken auf die Leinwand?Anruf Funktion zeichnen auf Mausklick

Ich möchte alles unter der Zeichenfunktion aufgerufen werden, wenn Sie irgendwo auf der Leinwand und nicht vorher klicken.

function setup() { 
 
createCanvas(500, 500); 
 
frameRate(65); 
 
    background('#ff0a0a'); 
 
textSize(60); 
 
text("ART", 370, 250); 
 

 
}; 
 
function draw() { 
 
    noFill(); 
 
    var red = random(100); 
 
    var green = random(200); 
 
    var blue =random(230); 
 
    var h = random(height); 
 

 
    stroke(red,green,blue); 
 
    strokeWeight(8); 
 
    rect(frameCount,h,300,20+(frameCount)); 
 
    
 
    ellipse(frameCount,h ,300,20+(frameCount)); 
 
    triangle(frameCount,h ,300,20+(frameCount)); 
 

 
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.14/p5.js"></script>

+0

Sie brauchen nicht die 'zu nennen draw()' Funktion selbst. Es wird automatisch 60 Mal pro Sekunde aufgerufen. Was genau versuchst du zu tun? Kannst du bitte einen [mcve] posten? –

+0

ja, ich werde meine ursprüngliche Frage bearbeiten. – codeneophyte

+0

Wenn Sie ein Snippet veröffentlichen, stellen Sie sicher, dass die Bibliothek enthalten ist. Siehe die Bearbeitung, die ich gerade gemacht habe. –

Antwort

1

Dies funktioniert gut für mich:

function setup() { 
 
    createCanvas(500, 500); 
 
    frameRate(65); 
 
    background('#ff0a0a'); 
 
    textSize(60); 
 
    text("ART", 370, 250); 
 
}; 
 

 
function mousePressed() { 
 
    noFill(); 
 
    var red = random(100); 
 
    var green = random(200); 
 
    var blue =random(230); 
 
    var h = random(height); 
 

 
    stroke(red,green,blue); 
 
    strokeWeight(8); 
 
    rect(frameCount,h,300,20+(frameCount)); 
 
    
 
    ellipse(frameCount,h ,300,20+(frameCount)); 
 
    triangle(frameCount,h ,300,20+(frameCount)); 
 
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.14/p5.js"></script>

+0

nice thank you! Gibt es eine Möglichkeit, es so zu machen, wenn ich einmal klicke, wird es kontinuierlich zeichnen, ohne mehrfach klicken zu müssen. – codeneophyte

+0

@codeenophyte Haben Sie die Funktion 'mouseDragged() 'ausprobiert, oder prüfen Sie, ob die Maus aus der' draw() 'Funktion gedrückt wird? –

+0

Nein, ich war mir der 'mouseDragged'-Funktion nicht bewusst, aber ich habe es jetzt ausprobiert und es macht genau das, was ich will. Danke für all deine Hilfe! – codeneophyte

0

nur eine andere Art zu erwähnen, und Ihre Frage in Kevin's answer oben zu adressieren, können Sie etwas tun So ziehen Sie kontinuierlich, wenn die Maus i s hat einmal geklickt und stoppt, wenn erneut geklickt wird. Dies würde für die Zeichnung wie ein Kippschalter arbeiten: -

var drawThings; 
 

 
function setup() { 
 
    createCanvas(500, 500); 
 
    frameRate(65); 
 
    background('#ff0a0a'); 
 
    textSize(60); 
 
    text("ART", 370, 250); 
 
} 
 

 
function draw() { 
 
    if (drawThings) { 
 
    noFill(); 
 
    var red = random(100); 
 
    var green = random(200); 
 
    var blue = random(230); 
 
    var h = random(height); 
 

 
    stroke(red, green, blue); 
 
    strokeWeight(8); 
 
    rect(frameCount, h, 300, 20 + (frameCount)); 
 

 
    ellipse(frameCount, h, 300, 20 + (frameCount)); 
 
    triangle(frameCount, h, 300, 20 + (frameCount)); 
 
    } 
 
} 
 

 
function mouseClicked() { 
 
    drawThings = !drawThings; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.14/p5.js"></script>

+0

Warum würden Sie nicht einfach die Variable 'mouseIsPressed' verwenden? Beachten Sie, dass ich diese Option bereits in den Kommentaren erläutert habe. –

+0

@KevinWorkman Weil das nicht den Toggle Draw-Effekt erreichen würde, würde das den Hold-Down-Effekt ergeben. –

+0

Ich dachte, dass OP nach dem Hold-down-Effekt suchte. Wie auch immer, beachte auch, dass du deine 'mouseClicked()' -Funktion verkürzen kannst, um 'drawThings =! DrawThings zu sein;' –