首页 > 解决方案 > 如何在处理中根据对象的旋转移动对象?(局部轴)

问题描述

所以我正在尝试制作一个正在处理的汽车游戏,汽车只在他的本地 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();
}

标签: javarotationprocessingtranslate

解决方案


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

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

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

    // [...]
}


推荐阅读