我正在製作一個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