2013-09-28 52 views
0

所以我一直在試圖做一些簡單的編碼:移動與WASD鍵藍色正方形,誤差將空隙到彼此(編譯沒有得到代碼)

public static void main (String args[]) 
{ 
    new MoveWASD(); 
} 

public MoveWASD() 
{ 
    super("Use-WASD-to-Move"); 
    setSize(800, 450); 
    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE);   
} 

public void paint(Graphics g) 
{ 
    g.setColor(Color.WHITE); 
    g.fillRect(0, 0, 800, 450); 

    g.setColor(Color.BLUE); 
    g.fillRect(Location[0], Location[1], 20, 20); 
    System.out.println("PRINTEDs"); 
} 

public class MoveDetection extends Thread implements KeyListener 
{ 




    @Override 
    public void keyReleased(KeyEvent e) { 
     // TODO Auto-generated method stub 

    } 


    @Override 
    public void keyTyped(KeyEvent e) { 
     // TODO Auto-generated method stub 

    } 



    public void keyPressed(KeyEvent arg0) 
    { 


       public void run() 
     { 
      while(true) 
      { 
      try 
      { 


       if(event.getKeyChar() == 'w') 
       { 
        Location[1] = Location[1] - 20; 
        Repeat = true; 
       } 
       else if(event.getKeyChar() == 'd') 
       { 
        Location[0] = Location[0] + 20; 
       } 
       else if(event.getKeyChar() == 's') 
       { 
        Location[1] = Location[1] + 20; 
       } 
       else if (event.getKeyChar() == 'a') 
       { 
       Location[0] = Location[0] - 20; 
       } 
       else 
       { 
       Location[0] = Location[0]; 
       } 

       Thread.sleep(75); 
      } 
      catch(Exception e) 
      { 
       break; 
      } 
      } 

     } 

    } 


} 

然而,一個get當將靜態空隙放入另一個時,出現錯誤,箭頭(向上)指向我的兩個錯誤:一個在下運行其中說: 對於標記「void」的語法錯誤,@期望 和另一個在最終父項下(其中說: 語法錯誤,請插入「EnumBody」來完成BlockStatements 另外,當我在我的movedetection類下的任何「void」下面放置一個「System.out.write()時,它不會顯示,這可能意味着它沒有進入它...... 正如我剛剛開始編碼,我不知道這意味着什麼,有什麼幫助?

+0

? – Zavior

+0

使用eclipse indigo我相信......這有幫助嗎? – user2789610

+0

Eclipse應該用紅色標記向你顯示語法出錯的位置,將你的鼠標光標移到紅色的x上,看看它說了什麼 – Zavior

回答

1

在Java中,您不能在其他方法中嵌套方法,可能會讀取this

您需要呼叫從其他方法

public void run(KeyEvent event) { 
    //do stuff 
} 
public void keyPressed(KeyEvent event) { 
    run(event); 
} 

的方法也許更重要的是你有一個事件處理程序while(true)。這將導致EDT被阻塞導致GUI凍結。

我看不到任何while循環的原因。按鍵事件將在每個按鍵被解僱。

+0

謝謝,它的工作原理雖然現在它不能在類MoveDetection下運行任何東西... – user2789610

+0

@ user2789610。您不應該從'MoveDetection'擴展'Thread'。您還需要將'MoveDetection'作爲'KeyListener'添加到GUI中的相應組件。 –

0

你宣佈一個方法的方法:

public void keyPressed(KeyEvent arg0) { 
    public void run() { 
     while(true) { 
      ... 

你不能做到這一點。嘗試刪除public void run()

public void keyPressed(KeyEvent arg0) { 
    while(true) { 
      ... 

或者,如果你想啓動一個線程(我懷疑你是):您使用的語法高亮一個IDE

public void keyPressed(KeyEvent arg0) { 
    new Thread(new Runnable() { 
     public void run() { 
      while(true) { 
       ... 
      } 
     } 
    }).start(); 
}