2012-11-01 74 views
0

使用此代碼作爲示例,我將如何將速度組件添加到對象?如何將速度添加到Java中的可移動對象?

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

那麼,你有什麼嘗試?另外,請刪除大部分代碼,因爲它與問題沒有直接關係... – MarioDS

+0

錯誤我認爲你裁剪了它有點過度 - 關鍵事件處理是相關IMO – speakingcode

回答

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; 
} 

修改這個有點適應你的上/下/左/右,並找出適合你的加速度。你甚至可以考慮只加速到極限,而不是任何過去的某個速度

相關問題