2012-01-16 47 views
0

好的,我如何使用Applet從鍵盤移動一個球?Java Applet - 在屏幕上移動一個球

我到目前爲止這個代碼,那什麼都不做。

import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 

public class KeyboardGame extends Applet implements KeyListener 
{ 

    private static final long serialVersionUID = 1L; 
    private static boolean keyboadrRightPressed = false; 

    public void init() 
    { 
     addKeyListener(this); 
    } 

    public void keyPressed(KeyEvent e) 
    { 
     int keyCode = e.getKeyCode(); 
     if(keyCode == KeyEvent.VK_RIGHT) 
     { 
      keyboadrRightPressed = true; 
     } 
     else 
     { 
      keyboadrRightPressed = false; 
     } 
    } 

    public void keyReleased(KeyEvent e) { 

    } 

    public void keyTyped(KeyEvent e) { 
    } 

    public void paint(Graphics g) 
    { 
     g.fillOval(20,20,20,20); 
     g.drawString("String :"+keyboadrRightPressed,20,30); 
    } 

} 

而且我也必須理解它是如何工作的。我不明白爲什麼我的動作聽衆不會工作,我需要一個

while(true) 

or Thread?

回答

2

您的動作監聽器實際上可能正常工作,但您需要在按下按鍵時重新繪製小程序,以便實際顯示您的字符串。嘗試改變的keyPressed這樣:

public void keyPressed(KeyEvent e) 
{ 
    int keyCode = e.getKeyCode(); 
    if(keyCode == KeyEvent.VK_RIGHT) 
    { 
     keyboadrRightPressed = true; 
    } 
    else 
    { 
     keyboadrRightPressed = false; 
    } 
    repaint(); 
} 

其實移動球將取決於你如何要球實際移動不同。我猜你希望它在鍵被按下時繼續向右移動,所以我會做的是實現一個計時器或其他形式的線程,每0.25秒(或者你想要的長度)檢查keyboardRightPressed並且將如果它是真的,則將球向右移動。然後在你的代碼的keyReleased部分,你應該添加邏輯,當你放開key時,將keyboardRightPressed設置回false。

+0

我這樣做,我實際上看到它在開始時有一點點暫停,球移動1個像素,等待0.5秒,直到連續移動,我是否應該使用線程來解決我的問題? – Master345 2012-01-16 17:48:54

+0

那裏的停頓是因爲鍵盤事件的工作方式。當你考慮在文本編輯器中輸入內容時,如果你按住'a'鍵,它會輸入一個a,暫停一會兒,然後開始添加一堆a。所以是的,我會使用一個線程,你可以執行一致的時間間隔,所以你不會有那麼小的滯後。您還需要將repaint()函數調用移動到實際移動球的線程中,以便在移動球時重繪,而不是在檢測到按鍵時重繪。 – aoi222 2012-01-16 17:55:07

+0

好的謝謝,如果我有更多的問題,我會問你 – Master345 2012-01-16 17:56:47