2012-12-08 92 views
1

此代碼正確構建,一切似乎都正常,但密鑰無所作爲。我認爲它不是動作偵聽器就是橢圓形沒有更新。我正在嘗試通過初學者java遊戲編程工作。我相信這很容易,但我沒有抓住它。如果這有所作爲,我會在崇高的文本2中使用mac。KeyPressed事件沒有發生?

package javagame; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class JavaGame extends JFrame { 

int x, y; 

public class AL extends KeyAdapter { 

    public void keyPressed(KeyEvent e) { 
     int keycode = e.getKeyCode(); 
     if(keycode == e.VK_LEFT); { 
      x-= 3; 
     } 
     if(keycode == e.VK_RIGHT); { 
      x+= 3; 
     } 
     if(keycode == e.VK_UP); { 
      y-= 3; 
     } 
     if(keycode == e.VK_DOWN); { 
      y+= 3; 
     } 
    } 


    public void keyReleased(KeyEvent e) { 

    } 
} 

public JavaGame() { 
    addKeyListener(new AL()); 
    setTitle("Jave Game"); 
    setSize(700, 700); 
    setResizable(false); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    x = 350; 
    y = 350; 
} 

public void paint(Graphics g) { 
    g.fillOval(x, y, 15, 15); 

    repaint(); 
} 

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

} 
+1

如有疑問,請簡化問題。首先驗證你是通過'System.out.println'語句進入'keyPressed',然後按下右鍵,最後如果你正在更新繪製blob。 – PearsonArtPhoto

+0

改爲使用KeyBindings – mKorbel

回答

6

您需要從if語句刪除分號:

if (keycode == e.VK_LEFT) 
{ 
    x-= 3; 
} 

目前是按照你的if語句代碼塊呈現獨立的分號終止這些語句。


一些Swing特異性注意事項:

  • 這是更好地使用paintComponent從子類JComponent更好的油漆 性能。
  • 使用Key bindings超過KeyListener改善關鍵事件管理。這是一個example
+0

你應該給他看一個簡單的例子,說明如何使用Key綁定。 – brimborium

+0

哇,我甚至不知道爲什麼我把那些放在那裏。謝謝我認爲這是明顯的。我很欣賞快速的回答和有用的鏈接,我對編碼真的很陌生,但至少我會好一點。 – SavgStorm

+0

@SavgStorm每個人都通過練習越來越好。不僅是「新」的。學習編碼的最佳方式(在我看來)是實際編碼。所以我想你是在正確的軌道上。 ;) – brimborium

2

即使有建議的更正,你仍然會有可能的問題。

首先,JFrame實際上包含許多組件,它們是根窗格,其中包含內容和分層窗格以及玻璃窗格(通常不可見)。如果這些組件中的任何一個因任何原因獲得了關鍵主板的焦點,那麼您的關鍵監聽器可能會被忽略。

更好的解決方案是使用key bindings API,它可以更好地控制焦點問題。

您也違反了油漆合同。在大多數情況下,您需要致電super.paint,實際上,您不鼓勵您重寫頂層容器的塗裝方法,而應從JPanel之類的東西延伸,並覆蓋其paintComponent方法。

這些繪畫方法執行非常重要的工作,你不應該忽略/略過它們。請參閱Painting in AWT and SwingCustom Painting in Swing以獲取更多信息

+0

我認爲他這樣做是爲了簡單。但是,我認爲這很不合適,它只是教會在屏幕上移動某些東西的基本想法。下一個教程切換到使用圖像和線程。謝謝你的信息。 – SavgStorm