在java中计算具有角度的点的移动

Den*_*ils 2 java math point angle

对于一个项目,我们正在制作一个自上而下的游戏.角色可以在所有方向上转弯和行走,并用点和角度表示.角度计算为当前面向方向与程序顶部之间的角度,可以是0-359.

我有以下运动代码:

public void moveForward()
{
    position.x = position.x + (int) (Math.sin(Math.toRadians(angle)) * speed);
    position.y = position.y + (int) (Math.cos(Math.toRadians(angle)) * speed);
}

public void strafeLeft()
{
    position.x = position.x - (int) (Math.cos(Math.toRadians(angle)) * speed);
    position.y = position.y - (int) (Math.sin(Math.toRadians(angle)) * speed);
}

public void strafeRight()
{
    position.x = position.x + (int) (Math.cos(Math.toRadians(angle)) * speed);
    position.y = position.y + (int) (Math.sin(Math.toRadians(angle)) * speed);
}

public void moveBackwards()
{

    position.x = position.x - (int) (Math.sin(Math.toRadians(angle)) * speed);
    position.y = position.y - (int) (Math.cos(Math.toRadians(angle)) * speed);
}

public void turnLeft()
{
    angle = (angle - 1) % 360;
}

public void turnRight()
{
    angle = (angle + 1) % 360;
}
Run Code Online (Sandbox Code Playgroud)

这在向上和向下移动时效果很好,并且可以转动,但是一转弯,左右功能似乎走向错误的方向(不仅仅是90度角),有时会切换

Kev*_*vin 5

怎么样:对所有移动方法使用相同的算法,并改变你移动的角度.

public void move(int some_angle){
    position.x = position.x + (int) (Math.sin(Math.toRadians(some_angle)) * speed);
    position.y = position.y + (int) (Math.cos(Math.toRadians(some_angle)) * speed);
}

public void moveForward()
{
    move(angle);
}

public void strafeLeft()
{
    move(angle+90);
}

public void strafeRight()
{
    move(angle-90);
}

public void moveBackwards()
{
    move(angle+180);
}
Run Code Online (Sandbox Code Playgroud)