0

以这段代码为例,我如何向对象添加速度分量?

class CircleFrame extends JPanel {
    static int x = 20;
    static int y = 20;
    int radius = 20;

    CircleFrame() {
        setSize(400,400);
    }

    @Override
    protected void paintComponent(Graphics g) {
        repaint();
        g.drawOval(x,y,radius,radius);
    }
}

此代码允许用户使用左、右、上和下箭头键控制 JFrame 中的一个小圆圈。如何添加速度?例如,当他们向右移动时,xvelocity 变得更大。一旦他们停止移动它,速度就会慢慢降低,直到物体停止。我在想线程是这里的答案,但我仍然不太了解它们。

4

1 回答 1

0

每一个动作都是一个独特的按键?即,如果我按住键,我只能移动?如果是这种情况并且您只想粗略计算速度,那么您可以在每个按下事件处理程序上调用 System.currentTimeMillis() ,将其保存在某个变量中,然后在下一次再次调用它,然后只需计算总数位移除以时间差......如果这是你想要做的评论,我会写一些代码。

另一种(更有可能)的可能性是您希望在他们按住键时增加速度......在这种情况下,找出您想要施加的加速度..使用第二个线程来增加速度并通知该动作减速当 keyUp 事件发生时停止。

int accel = 1;
boolean accelerating = false;
public void keyPressed(KeyEvent e)
{
   ...
   accelerating = true;
   new Thread() //anonymous inner class 
   { 
     public void run()
     {
       while (accelerating) { x += vel; vel += 1; }
       //no longer accelerating
       x = 0; //or decelerate gracefully with a similar loop as accel.
     }
  }.run();
}
public void keyUp(KeyEvent e) //or however you get a key release event
{
   accelerating = false;
}

稍微修改一下以使其适应您的上/下/左/右,并找出对您有意义的加速度。你甚至可以考虑只加速到极限,而不是超过某个速度

于 2012-11-01T00:28:57.513 回答