如何在Java中为可移动对象添加速度?

时间:2012-11-01 00:14:14

标签: java swing

使用此代码作为示例,如何将速度组件添加到对象?

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变大。一旦它们停止移动,速度会缓慢下降,直到物体停止。我认为线程是答案,但我仍然不太了解它们。

1 个答案:

答案 0 :(得分: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;
}

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