使用此代码作为示例,如何将速度组件添加到对象?
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变大。一旦它们停止移动,速度会缓慢下降,直到物体停止。我认为线程是答案,但我仍然不太了解它们。
答案 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;
}
稍微修改一下以使其适应你的上/下/左/右,并找出对你有意义的加速度。你甚至可能只考虑加速到一个极限,而不是任何过去某个速度