2013-02-09 75 views
1

所以我面臨的情況是我一直堅持一個小時。如何從Java中的遊戲畫布添加單獨的圖像

這是我的情況:我想添加一個圖像,說「生活:」與我的遊戲畫布分開,非常像這個遊戲塞爾達傳說中的NES。

Example

問題是:我的代碼仍然只顯示我的遊戲畫布。

public class Game extends Canvas { 

      private Game(){ 

      JFrame container = new JFrame("Arcade Shooter Clone"); 

      panel = (JPanel)container.getContentPane(); 
      panel.setLayout(new BorderLayout()); 

      panel.add(this,BorderLayout.CENTER); 

      ShipLifeTitle shipLifeTitle = new ShipLifeTitle(); 
      panel.add(shipLifeTitle,BorderLayout.SOUTH); 
      } 

    } 

    public class ShipLifeTitle extends Sprite { 

     private Image image; 

     public ShipLifeTitle() 
     { 
      try 
      { 
       image = ImageIO.read(new File("src/Ship/shipLifeTitle.PNG")); 


      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 

     } 

     @Override 
     public void draw(Graphics g) { 
      // TODO Auto-generated method stub 
      g.drawImage(image, 200, 200, null); 
     } 


    } 

    public class Sprite extends Component implements GameComponent { 

     public Vector2D position; 
     public Vector2D velocity; 

     @Override 
     public void update(long milliseconds) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void draw(Graphics g) { 
      // TODO Auto-generated method stub 

     } 



    } 

回答

1

在你ShipLifeTitle面板中,你需要重寫它的getPreferredSize方法。

public class ShipLifeTitle extends Sprite { 
    //... 
    public Dimension getPreferredSize() { 
     return new Dimension(image.getWidth(null), image.getHeight(null)); 
    } 
} 

這會給BorderLayout一些提示,以你希望如何將面板laied出

+0

我這樣做是根據您的反饋,但它並沒有讓這種語法,而不是我不得不像這樣的代碼: public Dimension getPreferredSize(){ return new Dimension(image.getWidth(null),image.getHeight(null)); }現在南部地區有一個灰色區域,並且仍然不顯示圖像。我的ShipLifeTitle是一個精靈,而不是一個面板。 – Nicholas 2013-02-09 01:54:49

+0

對不起,我使用'BufferedImages'使用' – MadProgrammer 2013-02-09 02:11:22

+0

我假設'Sprite'正在從它的'paintComponent'方法調用'draw',你已經把這部分代碼留給了... – MadProgrammer 2013-02-09 02:12:12