Я делаю 2D-шутер с видом сверху на Java (проект uni), но столкнулся с проблемой прицеливания пули - я не уверен, почему угол неправильный и как его исправить.
Игрок стреляет пулями в позицию курсора при наведении мыши. Я использую dx/y = (x/ytarget - x/yorigin), нормализуя и увеличивая положение пуль x/y с dx каждый тик.
Когда курсор перемещается, угол стрельбы следует за курсором, но угол отклоняется примерно на 45 градусов. Белый кружок — это игрок, красный — курсор, а желтые точки — пули.
У меня нет представителя для публикации изображений (первый пост), вот ссылка, показывающая ошибку угла.
Вот класс пули:
примечание: update() вызывается основным игровым циклом
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);
}
}
MouseInfo.getPointerInfo().getLocation();
в той же системе координат? - person MBo   schedule 15.03.2017