如何根据“处理”中对象的旋转来移动对象? (局部轴)

时间:2019-05-31 08:45:00

标签: java rotation processing translate

因此,我正在尝试制作一个汽车游戏,其中汽车仅在其本地y轴上移动,然后通过旋转而旋转。但是我想不出一旦旋转后如何使其在局部y轴上移动,这是我需要帮助的部分。我将代码发布在“处理中”:

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();
}

1 个答案:

答案 0 :(得分:0)

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

在窗口中,x轴指向左侧,y轴指向上方。 steering角是从向上方向顺时针测量的。
方向向量可以通过三角函数sincos获得,并且为:

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;
    }

    // [...]
}