2012-02-29 224 views
0

我的問題是我出錯的地方。它應該製作一個框架,我可以控制一個橢圓形,左右移動它,然後使它隨箭頭移動。但現在我甚至不能做出橢圓形,甚至不能插入一個詞。簡單介紹java遊戲編程

import java.awt.Graphics; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.JFrame; 


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--; 
     } 
     if(keyCode ==e.VK_RIGHT){ 
      x++; 
     } 
     if(keyCode ==e.VK_DOWN){ 
      y--; 
     } 
     if(keyCode==e.VK_UP){ 
       y++; 
     } 
    } 
    public void keyReleased(KeyEvent e){ 

    } 
} 
public JavaGame(){ 
    addKeyListener(new AL()); 
    setTitle("Game"); 
    setSize(250,250); 
    setResizable(false); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
public void Paint(Graphics g){ 
    x = 150; 
    y = 150; 
    g.fillOval(x, y, 15, 15); 
    repaint(); 
} 
public static void main(String[] Args){ 
new JavaGame(); 
} 
} 
+2

關的題目是:你不應該叫'重繪()'裏面油漆。它會導致無盡的重繪,浪費CPU時間,並且多次導致有線閃爍的圖形。和建議一樣,閱讀一個GUI教程,它需要一些時間來獲得它 - 然後它的樂趣:) – 2012-02-29 23:04:17

回答

7

可能是因爲Paint不是標準的Java paint方法。我沒有看到任何類似事件循環的東西 - 你有沒有考慮過檢查任何Swing教程/等等?

+0

即時通訊新,所以我會怎麼做。 – user1241388 2012-02-29 22:54:35

+2

@ user1241388:你可以在這裏找到教程:1)[真正的大指數](http://docs.oracle.com/javase/tutorial/reallybigindex.html),2)[使用Swing組件](http:/ /docs.oracle.com/javase/tutorial/uiswing/components/index.html),3)[2D圖形](http://docs.oracle.com/javase/tutorial/2d/index.html),4) [自定義繪畫與擺動](http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html) – 2012-02-29 23:05:44

4

建議:

  • 戴維說,你需要重寫正確的方法
  • 即使是這樣,你不應該直接在頂層窗口,而是在從派生的元件製圖JComponent,如JPanel或JComponent本身。
  • 借鑑這個類的paintComponent(...)方法(通常)。
  • 使用@Override註釋來確保您確實覆蓋了類的方法。
  • 請勿在Swing中使用KeyListener,而應使用Key Bindings。

例如,請看看我的樣本代碼在這裏:How to make an image move while listening to a keypress in Java.

+1

他也設置x和y爲150每次他「塗料」,其中覆蓋他的KeyListener是什麼做... – Hedja 2012-02-29 22:57:05