Okay I'm a bit confused with the whole surfaces[i].image I understand how to
assign rects and all but what I mean is how would I go about making that
class into a list?

On 9/10/07, Ethan Glasser-Camp <[EMAIL PROTECTED]> wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Lamonte Harris wrote:
> > class map_:
> >     def __init__(self,block=100,wndow=(300,300)):
> >         self.BLOCK = block
> >         self.size = wndow
> >         self.map = []
> >         self.surfaces = [[],[]]
> >         self.window = pygame.display.set_mode(self.size)
> >         pygame.init()
> >     def create_box(self,size,color,rect):
> >         box = pygame.Surface((size))
> >         pygame.draw.rect(box,color,box.get_rect())
> >         self.surfaces[0].append(box)
> >         self.surfaces[1].append(rect)
> >
> > Can you explain a little more.
>
> I can explain a lot more.
>
> In your code, you have a structure called "surfaces", which is kept in
> the map class. This structure is a list with two elements. These two
> elements are themselves lists -- the first one is a list of Surface
> objects, representing images, and the second one is a list of some
> type representing location of these images on-screen. In the code
> snippet above, your map "create_box" method adds an image and a
> location to this "surfaces" structure. These two things, image and
> location, are "paired", in a sense; the image has a location, and
> putting a different image at the same location, or putting the same
> image at a different location, would be a bug.
>
> Pairing information in this way is very common in all kinds of
> programs, not just games, and there are many mechanisms for showing
> this kind of pairing. You have implemented a mechanism which I will
> call "parallel arrays"; in order to access an image and its
> corresponding location, you look up the same index in two lists
> (surfaces[0][i] and surfaces[1][i]). This is a simple mechanism, and
> it works fine, but there are some complications. For instance, let's
> say you have five images, and five locations. Now you want to delete
> an image, but forget to delete its location. Now you have four images
> and five locations, and it may not be possible to figure out which
> image goes with which location.
>
> I am proposing the use of another structure, which is called "sprite"
> here but can really be called anything, which combines both the image
> and the location. If you were to structure your map_ class this way,
> instead of having "structures" be a list of two lists, it would be one
> list of sprites. To access the image and the location, you would do
> surfaces[i].image and surfaces[i].rect. In addition, you no longer
> have to worry about deleting all the parts of the sprite object; once
> the sprite is removed from the "surfaces" list, it's gone, not
> "half-there" like in the hypothetical "forgot to delete something" case.
>
> There is more to pygame sprites, but the reason I suggested you use
> them is that they keep the image and its location together.
>
> This is the "why". The "how" is outlined in the code I sent -- it
> creates one sprite, and uses its "image" and "rect" attributes to
> simplify moving it around onscreen (in an admittedly trivial way). As
> it applies to your own code you can probably figure out on your own.
>
> HTH,
>
> Ethan
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFG5hRXhRlgoLPrRPwRAkA+AKC2ys7nnDAbdX6Gd3NzVTf0eIZH2QCdFZK2
> G9xndlCnp/vvSqr+Hb8K9vY=
> =lAFx
> -----END PGP SIGNATURE-----
>

Reply via email to