我正在制作一个2D自上而下的Java射击游戏(uni项目),但弹出瞄准问题 - 我不确定角度不正确的原因,以及如何纠正它。我如何纠正一个稍微偏离矢量运动的java(2D游戏)
玩家在mousedown上的光标位置发射子弹。我正在使用dx/y =(x/ytarget - x/yorigin),用dx每个刻度标准化和增加项目符号x/y pos。
当光标移动时,触发角度跟踪光标 - 但角度偏离45度左右白色圆圈为玩家,红色为光标,子弹为黄色圆点。
我没有代表张贴图像(第一篇文章),这里是一个链接,显示角度的错误。
这里是子弹类:
注 - 更新()是由主游戏循环
import java.awt.*;
import java.awt.MouseInfo;
public class Bullet {
private double x;
private double y;
private int r;
private double dx;
private double dy;
private double speed;
private double angle;
private Point c;
private Color color1;
public Bullet(int x, int y) {
this.x = x;
this.y = y;
r = 3;
speed = 30;
color1 = Color.YELLOW;
c = MouseInfo.getPointerInfo().getLocation();
// getting direction
dx = c.x - x;
dy = c.y - y;
double distance = Math.sqrt(dx*dx + dy*dy);
dx /= distance;
dy /= distance;
}
public boolean update() {
x += dx*speed;
y += dy*speed;
if(x < -r || x > GamePanel.WIDTH + r ||
y < -r || y > GamePanel.HEIGHT + r) {
return true;
}
return false;
}
public void draw(Graphics2D g) {
g.setColor(color1);
g.fillOval((int) (x - r), (int) (y - r), 2 * r, 2 * r);
}
}
只是一个想法,尝试更改x和y为float而不是int,以避免丢失精度。我也会尝试通过代码来查看每个阶段的变量值。 –
你的计算看起来没错。但'MouseInfo.getPointerInfo()。getLocation();'在同一个坐标系中工作吗? – MBo
@Mbo我相信它将x和y坐标返回为double。据https://docs.oracle.com/javase/7/docs/api/java/awt/Point.html ..我错过了什么? – sbrez