Java箭头从屏幕边缘指向游戏中地图中其他位置的对象

Java箭头从屏幕边缘指向游戏中地图中其他位置的对象,java,algorithm,rotation,game-engine,angle,Java,Algorithm,Rotation,Game Engine,Angle,在我的Java游戏中,屏幕边缘有一个箭头,它应该指向地图上其他地方的一个对象,但它只是在屏幕上不停地旋转,没有指向对象,你知道为什么吗 这是我的密码: float angle = (float)Math.toDegrees(Math.atan2(currentInteractive.getY()-player.pos[1], currentInteractive.getX()-player.pos[0])); arrow.setRotation(angle); float magnitude;

在我的Java游戏中,屏幕边缘有一个箭头,它应该指向地图上其他地方的一个对象,但它只是在屏幕上不停地旋转,没有指向对象,你知道为什么吗

这是我的密码:

float angle = (float)Math.toDegrees(Math.atan2(currentInteractive.getY()-player.pos[1], currentInteractive.getX()-player.pos[0]));
arrow.setRotation(angle);

float magnitude;
float abs_cos_angle = (float) Math.abs(Math.cos(angle));
float abs_sin_angle = (float) Math.abs(Math.sin(angle));
if (Main.DISPLAY_WIDTH/2*abs_sin_angle <= Main.DISPLAY_HEIGHT/2*abs_cos_angle)
{
    magnitude = Main.DISPLAY_WIDTH/2/abs_cos_angle;
}
else
{
    magnitude = Main.DISPLAY_HEIGHT/2/abs_sin_angle;
}
float ax = (float) (camera.viewPort.getCenterX() + Math.cos(angle)*magnitude);
float ay = (float) (camera.viewPort.getCenterY() + Math.sin(angle)*magnitude);

arrow.draw(ax, ay, Color.green);
float angle=(float)Math.toDegrees(Math.atan2(currentInteractive.getY()-player.pos[1],currentInteractive.getX()-player.pos[0]);
箭头。设置旋转(角度);
浮动幅度;
float abs_cos_angle=(float)Math.abs(Math.cos(angle));
float abs_sin_angle=(float)Math.abs(Math.sin(angle));

如果(Main.DISPLAY_WIDTH/2*abs_sinu angle我解决了这个问题,结果发现这是因为我没有将角度转换为弧度,它会影响大小,我还必须用括号将数学的一些部分封装起来,以确保计算顺序正确

下面是我的代码:

Interactive currentInteractive = interactiveList.get(i);

currentInteractive.draw();

float angle = (float)Math.toDegrees(Math.atan2(currentInteractive.getY()-player.pos[1], currentInteractive.getX()-player.pos[0]));

arrow.setRotation(angle+90);

float magnitude;
float abs_cos_angle = (float) Math.abs(Math.cos(Math.toRadians(angle)));
float abs_sin_angle = (float) Math.abs(Math.sin(Math.toRadians(angle)));
if (Main.DISPLAY_WIDTH/2*abs_sin_angle <= Main.DISPLAY_HEIGHT/2*abs_cos_angle)
{
    magnitude = (Main.DISPLAY_WIDTH-20)/2/abs_cos_angle;
}
else
{
    magnitude = (Main.DISPLAY_HEIGHT-20)/2/abs_sin_angle;
}

float ax;
if(currentInteractive.pos[0] > player.pos[0]-(Main.DISPLAY_WIDTH/2) && currentInteractive.pos[0] < player.pos[0]+(Main.DISPLAY_WIDTH/2))
{
    ax = (float) currentInteractive.pos[0];
}
else
{
    ax = (float) (Math.cos(Math.toRadians(angle)) * magnitude) + camera.viewPort.getCenterX()-10;
}

float ay;
if(currentInteractive.pos[1] > player.pos[1]-(Main.DISPLAY_HEIGHT/2) && currentInteractive.pos[1] < player.pos[1]+(Main.DISPLAY_HEIGHT/2))
{
    ay = (float) currentInteractive.pos[1];
}
else
{
    ay = (float) (Math.sin(Math.toRadians(angle)) * magnitude) + camera.viewPort.getCenterY()-10;
}

arrow.draw(ax, ay, Color.green);
交互式currentInteractive=interactiveList.get(i); currentInteractive.draw(); 浮点角度=(float)Math.toDegrees(Math.atan2(currentInteractive.getY()-player.pos[1],currentInteractive.getX()-player.pos[0]); 箭头。设置旋转(角度+90); 浮动幅度; float abs_cos_angle=(float)Math.abs(Math.cos(Math.toRadians(angle)); float abs_sin_angle=(float)Math.abs(Math.sin(Math.toRadians(angle)); if(主显示宽度/2*abs\u sinu角度播放器位置[0]-(主显示宽度/2)和¤tInteractive.pos[0]player.pos[1]-(主显示高度/2)和¤tInteractive.pos[1]
一般来说,在这里放一大块代码不是一个好主意。最好用高级伪代码来描述你在做什么,或者至少给出一些建议,或者放足够的代码让我们可以运行它。这是新手吗?