Search code examples
javaprocessing

How to make the screen appear with mousePressed stay on the screen?


When I click screen, the Stop screen flashes on and then it goes back to the Walk screen. How do I get it to stay on the Stop screen until I click my mouse again?

boolean walk;
String textStop;
String textWalk;
float x; //positions
float y; //positions

void setup() {
  size (400,500);
  stop = false;
  textStop = "STOP!";
  textWalk = "WALK!";
}

void draw() {
  background(0,255,0);
  text(textWalk, x , y);
  x = 150;
  y = 250;
  textSize(40);  
}

void mousePressed() {
  if (stop);{
   background(255,0,0);
   text(textStop, x , y);
   }
   
   
 
} ```

Solution

  • Whenever you call background() you're clearing the screen.

    Because this happens in draw() every frame is cleared and redrawn with textWalk (and textStop) only gets displayed when you click (for the short duration of the mousePressed() event).

    You could use the walk variable for that. I see you use stop though it's not declared. They seem to be the opposite of each other in context so why not simpify and use just one. Sure you can code this if/else to toggle the value or you can simply use the !(logical not) operator:

    void mousePressed() {
      walk = !walk;
    }
    
    • when walk is true render textWalk
    • otherwise (else) render textStop

    something like:

    if(walk){
       text(textWalk, x , y);
    }else{
       text(textStop, x , y);
    }
    

    Here's a modified version of your code using the notes above:

    boolean walk = true;
    String textStop = "STOP!";
    String textWalk = "WALK!";
    float x = 150; //positions
    float y = 250; //positions
    
    void setup() {
      size (400,500);
      textSize(40);  
    }
    
    void draw() {
      if(walk){
        background(0,255,0);
        text(textWalk, x , y);
      }else{
        background(255,0,0);
        text(textStop, x , y);
      }
    }
    
    void mousePressed() {
      walk = !walk;
    }
    

    (Notice I've moved a few lines: in general it's a good idea to initialise values that don't change once at the start of your program rather than continuously. In this basic example it doesn't really affect performance, but for more complex programs it's a good idea to keep track of what changes and what doesn't.

    Also, it might help with other programs in the future to have a bit of separation between data that changes on events (e.g. walk on mouse pressed) and how that data gets rendered (e.g. using walk to render in draw())