2012-07-10 75 views
0

我創建了一個菜單,其中包含一些可供選擇的選項。其中一種選擇是「玩電腦」,開始遊戲。使用繪製方法創建類的對象

 JButton ai = new JButton("Play with computer"); 
    ai.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      GameBoard play = new GameBoard(); 
      hi.dispose(); //jframe 
     } 
    }); 

然後就是遊戲鍵盤:

@SuppressWarnings("serial") 
public class GameBoard extends Canvas { 
    private Image dbi; 
    private Graphics db; 
    private JFrame okno; 
    Rectangle aiPaddle = new Rectangle(10, 590, 10, 50); 
    Rectangle pPaddle = new Rectangle(10, 100, 10, 50); 
    Rectangle ball = new Rectangle(560, 10, 10, 10); 
    Player p = new Player(this); 
    Ai a = new Ai(this); 
    Ball b = new Ball(this); 
    GameBoard() { 
     okno = new JFrame(); 
     okno.setTitle("Pink Ponk"); 
     okno.setSize(600, 300); 
     okno.getContentPane().setBackground(Color.black); 
     okno.setResizable(false); 
     okno.setVisible(true); 
     okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     addKeyListener(p); 
    } 

    public static void main(String[] args) { 
     GameBoard gra = new GameBoard(); 
     gra.okno.add(gra); 
    } 

    @Override 
    public void update(Graphics g) { 
     dbi = createImage(10, 50); 
     db = dbi.getGraphics(); 
     paint(db); 
     g.clearRect(0, 0, 600, 300); 
     g.setColor(Color.white); 
     g.drawRect(p.getX(), p.getY(), 10, 50); 
     g.fillRect(p.getX(), p.getY(), 10, 50); 
     g.drawOval(b.getX(), b.getY(), 10, 10); 
     g.fillOval(b.getX(), b.getY(), 10, 10); 
     g.drawRect(a.getX(), a.getY(), 10, 50); 
     g.fillRect(a.getX(), a.getY(), 10, 50); 
    } 

    @Override 
    public void paint(Graphics g) { 
     pPaddle = new Rectangle(p.getX(), p.getY(), 10, 50); 
     aiPaddle = new Rectangle(a.getX(), a.getY(), 10, 50); 
     ball = new Rectangle(b.getX(), b.getY(), 10, 10); 
     g.clearRect(0, 0, 600, 300); 
     g.setColor(Color.white); 
     g.drawRect(p.getX(), p.getY(), 10, 50); 
     g.fillRect(p.getX(), p.getY(), 10, 50); 
     g.drawOval(b.getX(), b.getY(), 10, 10); 
     g.fillOval(b.getX(), b.getY(), 10, 10); 
     g.drawRect(a.getX(), a.getY(), 10, 50); 
     g.fillRect(a.getX(), a.getY(), 10, 50); 
    } 

} 

我敢肯定它應該工作,但事實並非如此。我越來越黑屏,沒有任何矩形或橢圓形。來自其他課程的線程正在工作,因爲我仍然失去了遊戲。 :)

回答

1

GameBoard的構造函數,這是您按下開始按鈕時唯一調用的,創建一個新框架,設置其背景並使其可見。但它不會在框架中添加任何組件。你可能需要添加

okno.add(this); 

請注意,這不是真的是你的畫布上顯示一個框架和其自身添加到這個框架,雖然的構造函數的責任。我會移動構造函數之外的框架創建。讓構造函數完成它應該做的事情:構造對象。

+0

謝謝! :)工程很好。 – 2012-07-10 11:18:58

+0

還有一個問題:創建框架的最佳位置是什麼? – 2012-07-10 11:29:52

+0

在動作監聽器中:創建一個包含畫布的框架是它的責任。您當然可以將其委託給一個私有方法,並從動作偵聽器中調用這個私有方法。 – 2012-07-10 11:31:24

相關問題