计算一个角度在java内的点的移动
Calculate the movement of a point with an angle in java
对于一个项目,我们正在制作一个俯视游戏。角色可以向各个方向转弯和行走,并用一个点和一个角度来表示。角度计算为当前面向方向与程序顶部之间的角度,可以是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;
}
这个在上下移动的时候效果很好,可以转弯,但是一转弯,左右功能好像方向不对(不只是90度角),有时会切换
这个怎么样:对所有移动方法使用相同的算法,只是改变移动的角度。
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);
}
对于一个项目,我们正在制作一个俯视游戏。角色可以向各个方向转弯和行走,并用一个点和一个角度来表示。角度计算为当前面向方向与程序顶部之间的角度,可以是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;
}
这个在上下移动的时候效果很好,可以转弯,但是一转弯,左右功能好像方向不对(不只是90度角),有时会切换
这个怎么样:对所有移动方法使用相同的算法,只是改变移动的角度。
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);
}