动画不起作用,组件只是沿x轴移动

时间:2018-06-10 23:36:07

标签: java animation awt

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

0 个答案:

没有答案