如何在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有关