2014-09-04 56 views
0

在此Java遊戲中,healthBars(實心矩形)不允許渲染任何東西。但是,healthBarBorders需要顯示在最前面,因爲它們本質上是一個帶有alpha的框架,允許矩形透視。因爲矩形來自Swing類,而其他東西不能渲染,所以這是問題來自。任何解決方法?無法在填充的矩形上渲染圖像

public void render() { 

    Graphics g = bs.getDrawGraphics(); 

    //RENDER HERE 
    backgroundImage.render(g); 
    player.render(g); 
    healthBars.render(g); //The rectangles (
    healthBarBorders.render(g); 

    //END RENDER 
    g.dispose(); 
    bs.show(); 
} 

HealthBar類

public class HealthBar extends JComponent { 

     int healthP1; 
     int healthP2; 

     public void render(Graphics g) { 
      paintComponent(g); //maybe this.paintComponent(g); 
     } 

     //Constructor 
     public HealthBar(int healthP1, int healthP2) { 
      this.healthP1 = healthP1; 
      this.healthP2 = healthP2; 
     } 

     public void paintComponent(Graphics g) { 

      Graphics2D g2 = (Graphics2D) g; 

      //Player 1 health bar 
      g2.setColor(Color.RED); 
      Rectangle redBarP1 = new Rectangle(10, 10, 300, 30); 
      g2.fill(redBarP1); 

      g2.setColor(Color.GREEN); 
      Rectangle greenBarP1 = new Rectangle(10, 10, healthP1, 30); 
      g2.fill(greenBarP1); 

      //Player 2 health bar 
      g2.setColor(Color.RED); 
      Rectangle redBarP2 = new Rectangle(800, 10, 300, 30); 
      g2.fill(redBarP2); 

      g2.setColor(Color.GREEN); 
      Rectangle greenBarP2 = new Rectangle(800, 10, healthP2, 30); 
      g2.fill(greenBarP2); 

      g2.dispose(); //Double check if I need this here 
     } 
    } 

的BackgroundImage渲染方法:

public void render(Graphics g) { 
    Graphics2D g2 = (Graphics2D)g; 
    g2.drawImage(background, 0, -27, 1200, 600, null); 
} 

播放器渲染方法:

public void render(Graphics g) { 
    if(attack) 
     attackAnimation.render(g, x, y, 400 * Game.SCALE, 400* Game.SCALE); 
    else 
     g.drawImage(im.player, x, y, 400 * Game.SCALE, 400 * Game.SCALE, null); 
} 

HealthBarBorders渲染方法:

public void render(Graphics g) { 
    Graphics2D g2 = (Graphics2D)g; 
    g2.drawImage(healthBorder1, 10, 10, 300, 30, null); 
    g2.drawImage(healthBorder2, 800, 10, 300, 30, null); 
} 
+1

您需要提供'healthBars'的代碼以及可能的所有其他'render'方法,因爲目前,這都是猜測 – MadProgrammer 2014-09-04 02:46:13

回答

1
  1. public class HealthBar extends JComponent {讓我害怕...
  2. paintComponent(g); //maybe this.paintComponent(g);讓我害怕...
  3. g2.dispose(); //Double check if I need this here沒有沒有這樣做,是你的問題的原因...

HealthBar不需要從JComponent延伸。事實上,它可以說,你應該使用interface它定義了一個簡單render方法和各個實體應該實現它...

但你的問題的核心是在你做了Graphics上下文調用dispose不會創建