2015-04-19 129 views
0

我寫了一些代碼,使迷宮和填充JPanel與我的數字Wall,Player,RoadGate。我想通過按鍵移動播放器WASDKeyListener沒有響應

幀被繪製但球員不動:

Sprite[][] spr = fr.read(); 
int x1 = fr.row; 
int y1 = fr.col; 
fr.close(); 
GameFrame gf = new GameFrame(spr, x1, y1); 


x1 = (x1 * 20) + 30; 
y1 = (y1 * 20); 

JFrame frame = new JFrame(); 
frame.setTitle("Lab"); 
frame.setSize(new Dimension(y1, x1)); 
frame.setPreferredSize(new Dimension(y1, x1)); 
frame.addKeyListener(gf); 
frame.setFocusable(true); 
frame.add(gf); 
frame.pack(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setLocationRelativeTo(null); 
frame.setVisible(true); 
frame.setResizable(false); 

public void paint(Graphics g) { 
    int a13 = 5; 
    int a14 = 5; 
    Player pl = new Player(); 
    super.paintComponent(g); 


    for (int i = 0; i < i1; i++) { 
     for (int i0 = 0; i0 < i2; i0++) { 
      Sprite currentSpr1 = sprites[i][i0]; 
      X = currentSpr1.setXCoord(i); 
      Y = currentSpr1.setYCoord(i0); 
      H = currentSpr1.setHeight(); 
      W = currentSpr1.setWidth(); 

      if (currentSpr1 == pl) { 
       addKeyListener(this); 

      } 
      currentSpr1.YourPaint(g, X, Y, H, W); 
     } 
    } 



    public void keyPressed(KeyEvent e) { 
     int c = e.getKeyCode(); 

     if (c == KeyEvent.VK_W) { 
      Y = Y - 20; 
      System.out.print("lol"); 
      repaint(); 


     } 

     if (c == KeyEvent.VK_S) { 
      Y = Y + 20; 
      //repaint(); 
     } 
     if (c == KeyEvent.VK_D) { 
      X = X + 20; 
      //repaint(); 
     } 
     if (c == KeyEvent.VK_A) { 
      X = X - 20; 
      //repaint(); 
     } 

     //if (sprite instanceof Wall){ 

     //}*/ 

    } 
+0

兩個for循環中的'i1'和'i2'是什麼? – Blip

+0

@Blip它的行和列,所以它貫穿整個龐大的 –

+0

'currentSpr1 == pl'曾經計算爲'true'嗎? – Blip

回答

0

嗯,這是一個有點很難理解你的代碼,但首先:

在你的keyPressed方法你遞增X或是的,但是在你的更新方法中你重置了X和Y,所以這將不起作用。

什麼是gf?是上面的班級嗎?您應該添加「this」作爲鍵盤記錄器。

+0

你能指定更多的是我重置我的代碼? 我試圖添加這個,它說你不能在靜態環境下添加這個 –

+0

這是我通常做的: – Jake

+0

你可以在frame.addKeyListener()中添加一個類;實現KeyListener。如果你在你的類聲明之後編寫「implements KeyListener」,eclipse將幫助你實現你需要的方法。你做frame.addKeyListener(this);現在,每次按下某個鍵時,該框架都會調用您的課程「this」中的其中一種方法。 – Jake