如何根据 Processing 中的旋转移动对象? (局部轴)

How do I move an object based on its rotation in Processing? (Local axis)

所以我正在尝试制作一个正在处理的汽车游戏,其中汽车仅在其局部 y 轴上移动,并通过旋转转动。但是我不知道如何让它在旋转后在局部 y 轴上移动,这是我需要帮助的部分。我post处理中的代码:

class CarClass{
  float speed, x, y, steering, w;
  CarClass(){
    speed = 5;
    x = width/2;
    y = height/2;
    steering = radians(0);
    w = 5;
  }

  void display(){
    translate(x, y);
    rotate(steering);
    rectMode(CENTER);
    rect(0, 0, 40, 82);   
  }

  void up(){
    y -= speed;
  }
  void down(){
    y += speed;
  }
  void left(){
    steering -= radians(w);
  }
  void right(){
    steering += radians(w);
  }  
}

void movement(){
  if(keyPressed) {
    if (keyCode == UP) {
      car.up();
    }
    if (keyCode == DOWN) {
      car.down();
    }
    if (keyCode == LEFT) {
      car.left();
    } 
    if (keyCode == RIGHT) {
      car.right();
    }
  }
}

CarClass car;


void setup(){
  size(854,480);
  car = new CarClass();
}

void draw(){
  background(10,10,10);
  car.display();
  movement();
}

您必须按照 steering 角度定义的方向移动汽车。

在window中,x轴指向左侧,y轴指向上方。 steering 角度是从向上顺时针测量的。
方向向量可以通过三角函数sin and cos得到,为:

v = (sin(steering), -cos(steering))

使用这个向量来操纵汽车的位置(xy):

class CarClass {

    // [...]

    void up(){
        x += sin(steering) * speed;
        y -= cos(steering) * speed;
    }
    void down(){
        x -= sin(steering) * speed;
        y += cos(steering) * speed;
    }

    // [...]
}