Nick Ziebert
Nick Ziebert

Reputation: 1268

Multiple objects Not rendering

I'm making a space game that renders objects onto a JPanel. These objects' render method is called in my Space class.

I have 2 objects, alienShip and myShip with respective classes. Each class has a render method. I can't get both ships to render onto my JPanel simultaneously, it's either one or the other. I only see the object that calls the .render(g2) method first.

SPACE CLASS:

spaceImage=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
foregroundImage=new BufferedImage(WIDTH, HEIGHT,   BufferedImage.TYPE_INT_RGB);

//create the space Image background and instantiate ships (myShip, alienShip)

//Below render() method is  called in my Game class using a standard game loop with 
update method and rendor method. 

public void render(Graphics2D g) {
    Graphics2D g2=(Graphics2D) foregroundImage.getGraphics();
    g2.drawImage(spaceImage, 0, 0, null);
    myShip.render(g2);            <---alienShip does not appear, only myShip.
    alienShip.render(g2);         <---If I swap these 2 commands, then alienShip appears, 
                                      and myShip does not

    g.drawImage(foregroundImage, x, x, null);
}   

ALIENSHIP AND MYSHIP CLASS:

public void render(Graphics2D g) {
    g.drawImage(shipImage, x, y, null);
    g.dispose();
}

I've tried to create a Drawable interface, and loop through all drawable objects calling DrawableObject.render(g2), but doesn't fix it. Furthermore, I have bullets that DO rendor simultaneously with myShip.

myShip and alienShip does extend an abstract class called Ship as well. Hope this makes sense.

Upvotes: 1

Views: 81

Answers (1)

Andy Ray
Andy Ray

Reputation: 32076

You're .dispose()ing the graphics object after drawing one item, then trying to draw another item with it.

Upvotes: 1

Related Questions