我正在尝试进行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轴朝向原点移动。