views:

173

answers:

2

Hello

In C# I saw already the SpriteBatch class (In the XNA plugin for XBOX games). In that class is it posible to paint in layers. Now I want to do the same in Java because I'm making braid (See my other questions) and I have an ArrayList from all the GameObjects and that list is not made in the correct paintoreder.

For exemple: I have a door but the door is painted on the player.

Martijn

+1  A: 

How about sorting the items before rendering? The background items have to be painted first and the foreground ones last.

If you have a List and items are Comparable you can use

Collections.sort(list);

If you need a special order, you can implement your own Comparator.

All that of course requires the items to hold some info on their z-position.

And you shouldn't do this in the paint method. sort items when they're changed, ie. added.

Stroboskop
thanks I will try it and let you know something. It looks a great solution
Martijn Courteaux
thanks for the idea. It works.
Martijn Courteaux
+1  A: 

Sorting the list of items should solve your issue, but if you do find you need to paint layers, you can do it like this:

Create a BufferedImage for each layer

    BufferedImage[] bi = new BufferedImage[3];
    bi[0] = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

Paint into the buffered images

    Graphics2D bg2 = bi[0].createGraphics();
    bg2.drawXXX(...);

That should all be outside the actual paint method.

In the paint or paintComponent method, use alpha compositing to assemble the layers

    AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
    g2.setComposite(ac);
    for (int i = 0; i < bi.length; i++) {
        g2.drawImage(b[i], 0, 0, this);
    }
Devon_C_Miller