物体向错误的方向移动

时间:2014-05-12 11:25:51

标签: java math

我的Java游戏存在问题(2d,自上而下的视图) 我的角色朝着鼠标的方向射击子弹。 我尝试了一些我在这里找到的代码,但是我遇到了问题。 小弹只是很少朝正确的方向移动。 它常常向上,向下,向左和向右移动。 看到我在尝试其他代码时也遇到了这个问题我不认为问题出在这段代码中。任何想法?

int deltax = bullet.endpos.x - bullet.startx;//this code is when I create a new bullet
int deltay = bullet.endpos.y - bullet.starty;
direction = Math.atan(deltay / deltax);
speed = 5.0;

bullet.x=(bullet.x - (speed * Math.cos(direction)));
bullet.y=(bullet.y - (speed * Math.sin(direction)));

1 个答案:

答案 0 :(得分:4)

您无需知道此代码中的真实角度。

代码应为:

int deltaX = bullet.endpos.x - bullet.startx; //this code is when I create a new bullet
int deltaY = bullet.endpos.y - bullet.starty;
double radius = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
double normalizedDeltaX = deltaX / radius;
double normalizedDeltaY = deltaY / radius;
speed = 5.0;

bullet.x -= /*maybe your error is here, and there should be += as you need to increment coordinates, not decrement*/ speed * normalizedDeltaX;
bullet.y -= /*the same thing here*/ speed * normalizedDeltaY;

或者如果你真的想到这个角度(在这种情况下适用于什么?),Math.atan2更值得赞赏,因为你不会失去飞机的第三和第四季度:

double direction = Math.atan2(deltaY, deltaX);