Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中为可移动对象添加速度?_Java_Swing - Fatal编程技术网

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

如何在Java中为可移动对象添加速度?,java,swing,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) { repa

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

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

每次移动都是一次独特的按键?也就是说,如果我按住钥匙,我只能移动一步?如果是这样的话,你只想粗略地计算速度,那么你可以调用 在每个press事件处理程序上,将其保存在某个变量中,然后在下一个变量中再次调用,然后计算总位移除以时间差。。。如果这就是你想要做的,我会写一些代码

另一种(更可能的)可能性是,当他们按下键时,你希望速度增加。。。在这种情况下,计算出你想要施加的加速度。。使用第二个线程来增加速度,并在发生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;
}

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

那么,你尝试了什么?另外,请删除大部分代码,因为它与问题没有直接关系……呃,我认为您对它的裁剪有点过分了——关键事件处理与IMO有关