4
\$\begingroup\$

I've got a game that has 3 basic sprites, at the moment I'm loading 8 images into each sprite for animating. Each character class has a sprite object. if I've got 10 characters on screen at once then that's 80 images loaded in to memory. Can I make a central sprite class that only holds 8 images for each of the 3 sprites, then get the character objects to request the relevant images from the central sprite class, thereby massively reducing the memory required for the images?

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Yes, you can, and should. \$\endgroup\$
    – thedaian
    Commented Nov 25, 2011 at 21:41

1 Answer 1

2
\$\begingroup\$

You can and you probably should. I believe that in Java (as in C#) objects are going to be passed by reference, so you should get this behavior by default without doing any extra work.

Code like this:

Sprite spr = Sprite.LoadFromFile("c:\sprite.s");

Character c1 = new Character(spr, x1, y1);
Character c2 = new Character(spr, x2, y2);
Character c3 = new Character(spr, x3, y3);

Should give you three Character objects all referencing the same Sprite object.

A quick search shows that I stand corrected. Java is in fact pass-by-value; however, since java has "pointers" the result in the code above should remain the same. Java passes the pointer to the sprite by value; but they will all still "reference" the same sprite.

\$\endgroup\$
2
  • \$\begingroup\$ Cool, so I have an image, I pass that image to the character object as a parameter, java passes the value of the pointer (essentially a reference) to the object, which then draws the original image on screen. This means if I have 10 characters all using the same image I simply say "draw this image, ten times in these specific locations" thereby reducing the memory I use significantly. Correct? \$\endgroup\$
    – mal
    Commented Nov 26, 2011 at 12:44
  • \$\begingroup\$ That is my understanding, yes. \$\endgroup\$
    – Nate
    Commented Nov 28, 2011 at 7:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .