2013-03-29 140 views
0

我正在製作一個Pong程序,並且我有一個開始按鈕來開始繪製所有內容,並且非常字面地讓球滾動(歡迎你的雙關語)。無論如何,當我點擊開始按鈕時,除非我在畫布上的某個地方單擊鼠標以使其優先,否則一個Key Listener移動這些撥片將無法工作。是否有某種代碼可以自動在畫布上「點擊」,而不會讓用戶被困擾?提前致謝。點擊畫布

這是順便運行awt。我意識到我應該學習擺動,但從來沒有解決它。

public class Pong extends Applet implements ActionListener, KeyListener 
{ 
    Canvas c1; 
    Graphics myG; 
    Button start; 

    ball ball; 
    paddle LPaddle; 
    paddle RPaddle; 

    public void init() 
    { 
     this.setSize(1300,700); 

     c1 = new Canvas(); 
     add(c1); 
     c1.addKeyListener(this); 
     c1.setBackground(Color.pink); 

     start = new Button("Start"); 
     add(start); 
     start.addActionListener(this); 


     ball = new ball(); 

     LPaddle = new paddle(); 
     RPaddle = new paddle(); 

     myG = c1.getGraphics(); 


    } 

    public void paint(Graphics g) 
    { 
     c1.setLocation(0,0); 
     c1.setSize(1251,700); 

     start.setLocation(1255,350); 
     start.setSize(40,20); 
    } 


    public void keyPressed(KeyEvent e) 
    { 
     if(e.getKeyCode()==KeyEvent.VK_UP)//up 
     { 
      RPaddle.erasePaddle(myG); 
      RPaddle.movePaddleUp(); 
      RPaddle.drawPaddle(myG); 
     } 
     if(e.getKeyCode()==KeyEvent.VK_DOWN)//down 
     { 
      RPaddle.erasePaddle(myG); 
      RPaddle.movePaddleDown(); 
      RPaddle.drawPaddle(myG); 
     } 
     if(e.getKeyCode()==KeyEvent.VK_W) 
     { 
      LPaddle.erasePaddle(myG); 
      LPaddle.movePaddleUp(); 
      LPaddle.drawPaddle(myG); 
     } 
     if(e.getKeyCode()==KeyEvent.VK_S) 
     { 
      LPaddle.erasePaddle(myG); 
      LPaddle.movePaddleDown(); 
      LPaddle.drawPaddle(myG); 
     } 
     if(e.getKeyCode()==KeyEvent.VK_ENTER) 
     { 
      myG.drawLine(625,0,625,700); 
      LPaddle.setInitial(150,0,350); 
      RPaddle.setInitial(150,1250,350); 

      LPaddle.drawPaddle(myG); 
      RPaddle.drawPaddle(myG); 
     } 
    } 

    public void keyReleased(KeyEvent e) 
    { 

    } 

    public void keyTyped(KeyEvent e) 
    { 

    } 



    public void actionPerformed(ActionEvent e) 
    { 
     if(e.getSource()==start) 
     { 
      myG.drawLine(625,0,625,700); 
      LPaddle.setInitial(150,0,350); 
      RPaddle.setInitial(150,1250,350); 

      LPaddle.drawPaddle(myG); 
      RPaddle.drawPaddle(myG); 
     } 
    } 
+0

請發佈最少量的代碼來說明您的問題。 –

+0

您是否必須使用AWT或可以使用Swing? – MadProgrammer

回答

1

KeyListeners是其有重大,顯著退低級別的接口:他們是註冊到必須及部件成爲焦點和重點。

通過單擊開始按鈕,您正在給按鈕焦點。

您可以在畫布的實例上調用requestFocusInWindow,但是這裏假設畫布可以放在第一位。

如果可以,您最好使用JComponent/JPanel作爲遊戲畫布的基礎,並使用key bindings API。