Как мне переместить объект на основе его вращения в обработке?(Локальная ось) - PullRequest
1 голос
/ 31 мая 2019

Итак, я пытаюсь сделать автомобильную игру в процессе обработки, когда машина движется только по его локальной оси 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 голосов
/ 31 мая 2019

Вам нужно переместить автомобиль в направлении, которое определяется углом steering.

В окне ось x указывает влево, а y - вверх.Угол steering измеряется по часовой стрелке от направления вверх.
Вектор направления можно получить с помощью тригонометрических функций sin и cos и составляет:

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

Используйте этот вектор для управления положением (x, y) автомобиля:

class CarClass {

    // [...]

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

    // [...]
}

...