Rotating an object on command

Hello, in school we are currently learning coding and for a while i’ve been trying to get an object to rotate, when I press certain keys. Here is the code I am working with as of right now:

int X;
int Y;
int SIVU;
int SIVU2;

void setup ()
{
  fullScreen ();
  colorMode (HSB, 100);
  frameRate (60);
  X = 0;
  Y = 0;
  SIVU = 40;
  SIVU2 = 70;
}

void draw ()
{
  background (#1CD332);
  fill (#A8AFA9);
  noStroke ();
  rect (100, 900, 700, 100);
  rect (100, 100, 100, 900);
  fill (#FF05E7);
  stroke (0);
  strokeWeight (1);
  rect (X, Y, SIVU, SIVU2);
} 
void keyPressed ()
{ 
  if (key == 'd')
  {  
    X = X + 5;
  }  
  if (key == 's')
  { 
    Y = Y + 5;
  }  
  if (key == 'a')
  { 
    X = X - 5;
  }  
  if (key == 'w')
  { 
    Y = Y - 5;
  }  
}

So what i want is the object to rotate 90 degrees, to the left when I press A, to the right, when I press D and go back to the start position with W and S. Please help me i’ve tried everything I myself could.
Thank you.

I don’t see you using the rotate() command anywhere in your code – just moving things left, right, up and down.

Have you looked at the rotate command?

Have you read the tutorial on 2D Transformations, which covers how to rotate things?

Edit: …ah, I see, by “rotated” you mean swapping the width and height variables to create a 90-degree effect, rather than actually rotating.

1 Like

Hi ToivoUkkone,

In your case, you can simply change the way you draw your rectangle using a boolean variable rotated. You switch it to true when pressing ‘a’ or ‘d’ and to false when pressing ‘w’ or ‘s’.

Then in draw depending on the value of rotated you switch your SIVU and SIVU2 variables.

You can also change the rectMode to CENTER to make it more fluid.

int X;
int Y;
int SIVU;
int SIVU2;
boolean rotated;

void setup ()
{
  fullScreen ();
  colorMode (HSB, 100);
  frameRate (60);
  X = 0;
  Y = 0;
  SIVU = 40;
  SIVU2 = 70;
  rotated = false;
}

void draw ()
{
  rectMode(CORNER);
  background (#1CD332);
  fill (#A8AFA9);
  noStroke ();
  rect (100, 900, 700, 100);
  rect (100, 100, 100, 900);
  fill (#FF05E7);
  stroke (0);
  strokeWeight (1);
  rectMode(CENTER);
  if (rotated) {
    rect (X, Y, SIVU2, SIVU);
  } else {
    rect (X, Y, SIVU, SIVU2);
  }
} 
void keyPressed ()
{ 
  if (key == 'd')
  {  
    X = X + 5;
    rotated = true;
  }  
  if (key == 's')
  { 
    Y = Y + 5;;
    rotated = false;
  }  
  if (key == 'a')
  { 
    X = X - 5;
    rotated = true;
  }  
  if (key == 'w')
  { 
    Y = Y - 5;
    rotated = false;
  }
}
1 Like

Thank you so much for looking into my code and helping, I got it to work now!