2012-02-23 47 views
1

我正在製作2D遊戲並繪製到框架內的表面。問題是這樣的,我是通過後臺循環和繪製背景圖片(使用圖像平鋪),這裏是結果:Java框架大小本身錯誤

注:我的框架設置爲640,480

enter image description here

由於你可以看到頂部和左側是關閉的幾個像素,我主要是擔心頂部..

我使用此代碼來初始化框架:

frame = new Frame(_title); 


    frame.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
      System.exit(0); 
     } 
    }); 


    frame.addMouseListener(new Mouse()); 
    frame.addKeyListener(new Keyboard()); 
    frame.setSize(new Dimension(width, height)); 
    frame.setResizable(false); 
    frame.setBackground(Color.lightGray); 
    frame.setVisible(true); 
    frame.createBufferStrategy(2); 

這裏是怎麼了繪製背景:

for(int x = 0; x < GameClient.width; x+= 32) { 
     for(int y= 0; y< GameClient.height; y+= 32) { 
       g.drawImage(floor, x , y, null); 

     } 
    } 

我本來以爲它會正常工作,但顯然不是..

什麼我做錯了,或我怎麼能解決這個問題?

謝謝。

回答

1

無論哪種方式,使用frame.getInsets.top()frame.getInsets().left,然後開始繪製這些點。

+0

謝謝,這很好:) – 2012-02-23 08:29:20

3

首先,你應該使用swing而不是舊的awt(但原理是相同的)。


幀開始於包括邊框左上角。在框架中添加一個組件並覆蓋該組件方法上的paintComponent以獲得正確的起始座標。


下面是一個完整的例子:

enter image description here

public static void main(String[] args) { 

    JFrame frame = new JFrame(); 
    frame.add(new JComponent() { 
     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 

      g.setColor(Color.GRAY); 
      for (int x = 0; x < getWidth(); x += 32) 
       for (int y = 0; y < getHeight(); y += 32) 
        g.fill3DRect(x+1, y+1, 30, 30, true); 
     } 
    }); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(600, 600); 
    frame.setVisible(true); 
} 
+0

雖然我沒有使用JFrame,但我正在使用AWT的框架。雖然我不確定這是否重要。 – 2012-02-23 08:15:26

+1

回覆您的編輯,本網站的用戶告知我應該使用AWT進行2D遊戲開發而不是Swing。 – 2012-02-23 08:21:01

+2

+1這是正確的答案。可惜OP選擇了不太合適的策略。至於「被告知使用AWT」。那個建議可能是做定製繪畫,你通常只使用AWT中的類。諸如'Graphics'和'Graphics2D','Color'和'Font'是很常見的。至於要使用的***組件,它們都應該是Swing。我懷疑在這個時代使用AWT組件會有什麼顯着的「性能提升」(如果有的話)。 – 2012-02-23 08:42:31