Java箭头从屏幕边缘到游戏中地图中的其他对象



在我的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);

我解决了这个问题,结果发现这是因为我没有将角度转换为弧度,而且它扰乱了幅度,我还必须用括号封装数学的一些部分,以确保它的计算顺序正确。

这是我的代码:

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);

相关内容

最新更新