如何根据 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))
使用这个向量来操纵汽车的位置(x
,y
):
class CarClass {
// [...]
void up(){
x += sin(steering) * speed;
y -= cos(steering) * speed;
}
void down(){
x -= sin(steering) * speed;
y += cos(steering) * speed;
}
// [...]
}
所以我正在尝试制作一个正在处理的汽车游戏,其中汽车仅在其局部 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))
使用这个向量来操纵汽车的位置(x
,y
):
class CarClass {
// [...]
void up(){
x += sin(steering) * speed;
y -= cos(steering) * speed;
}
void down(){
x -= sin(steering) * speed;
y += cos(steering) * speed;
}
// [...]
}