Я пытаюсь создать симуляцию Agar.io, поэтому я использую метод MouseMotionListener mouseMoved, чтобы найти местоположение курсора, и вычисляю разницу между координатами курсора и координатами агара, чтобы вычислить наклон для анимации.
Ниже приведен код для реализованной mouseMoved ():
private class CursorTracker implements MouseMotionListener {
public void mouseMoved(MouseEvent e) {
//cursor location
cursor_x = e.getPoint().getX();
cursor_y = e.getPoint().getY();
//agar location
agar_x = agar.getX();
agar_y = agar.getY();
repaint();
}
public void mouseDragged(MouseEvent e) {}
}
Ниже actionPerformed () для таймера панели:
private class Animator implements ActionListener {
public void actionPerformed(ActionEvent e) {
//adding food
if (count == 30) {
addRandomFood();
count = 0;
}
count++;
//agar animation - functions on slope animation: x changes by 1, y by m
double delta_x = cursor_x - agar_x;
double delta_y = cursor_y - agar_y;
//slope
double m = (delta_y)/(delta_x);
//pass parameters
agar.move(1, m);
repaint();
}
}
А вот код для Agar.move() метод:
public void move(double x_interval, double y_interval) {
if (x >= 0)
x -= x_interval;
if (y >= 0)
y -= y_interval;
}
Мое намерение состоит в том, чтобы выяснить наклон (который составляет ∆y / ∆x), изменить x на 1 и y на значение наклона (m) при каждом повторении таймера, чтодолжно теоретически привести к тому, что объект агара будет перемещаться к месту расположения курсора побитно.(поправьте меня, если я ошибаюсь)
Кроме того, детектор курсора (mouseMoved), кажется, работает странно;он работает только один раз, агар не меняет направление движения, даже если курсор перемещен.И он может даже не правильно «прослушивать» курсор и просто делать это по умолчанию, потому что независимо от местоположения курсора, когда программа запускается, агар всегда заканчивается движением вдоль оси x к началу координат.