java - 如何在处理中根据对象的旋转移动对象?(局部轴)
问题描述
所以我正在尝试制作一个正在处理的汽车游戏,汽车只在他的本地 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();
}
解决方案
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;
}
// [...]
}
推荐阅读
- typescript - TypeScript:从 JSON 反序列化到有区别的联合
- r - 使用 geom_sf 绘制基于点的内核映射
- c++11 - 在下面的例子中,指针 p 从哪里获取信息?
- machine-learning - 如何在 Keras 模型中拆分输入
- javascript - 删除 csv 文件中的每一行
- javascript - 如何用scrollmagic滚动效果?
- c# - 没有通过 RestSharp 调用发送 OAuth2 Bearer Token
- reactjs - 如何将属性传递给 React 函数组件?
- javascript - 防止超链接在新选项卡/窗口中打开
- javascript - jQuery 选择器性能:Safari