【问题标题】:How do I move an object based on its rotation in Processing? (Local axis)如何在处理中根据对象的旋转移动对象? (局部轴)
【发布时间】:2019-10-16 21:34:15
【问题描述】:

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

【问题讨论】:

标签: java rotation processing translate


【解决方案1】:

您必须将汽车移动到由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;
    }

    // [...]
}

【讨论】:

  • 非常感谢!你真的是上帝,尽管我想这对你来说并不难
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
相关资源
最近更新 更多