I have a draw loop that makes a new graphic each time. I want to be able to pause the loop by clicking the mouse when I see a graphic that I like. But everything I’ve tried fails to stop on the current frame. It’s always the next frame, or a later one, no matter how slow the frame rate. For example,
if (mousePressed == true) { delay(20000); }
pauses things for 20 seconds, but it seems to take a frame or two until things stop.
I haven’t found any info that addresses this sort of thing…I’m doing something wrong. Suggestions?
// Discourse.Processing.org/t/how-to-freeze-a-draw-loop/2741/2
// GoToLoop (2018-Aug-18)
static final int DELAY = 5 * 1000; // 5 seconds
static final float FPS = .5; // 2 seconds
void setup() {
size(300, 150);
frameRate(FPS);
}
void draw() {
getSurface().setTitle("Frame: " + frameCount);
background((color) random(#000000));
}
void mousePressed() {
pauseFrame();
}
void pauseFrame() {
delay(DELAY);
}
You can use loop()
and noLoop()
. You can find hem in the reference. Another way, which is not documented in the reference, is to do this:
void mousePressed(){
looping = !looping; //EDIT******
}
This toggles between loop and noLoop, exactly as I suggested in the first line. however, this way is more straight forward. Not sure if it will stop right at the frame that you want. Just give it a try and see if it works for you.
Kf
1 Like
I get an error: Syntax error on token"!=", invalid AssignmentOperator
But the other suggestion works. Thanks!
1 Like
Should be instead: looping = !looping;
or looping ^= true;
This seems to stop it on the next frame, not the current one.
My mistake… I will correct my post.
We will need to see some code to see if it is possible to store your current state, or use another approach different to looping.
Kf