对于一个项目,我们正在制作一个自上而下的游戏。角色可以在所有方向上转弯和行走,并用点和角度表示。角度计算为当前面向方向与程序顶部之间的角度,可以是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度角),有时会切换
答案 0 :(得分: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);
}