Makes so much more sense now...and that worked great. Thanks :)
/me does a little happy python dance On Tue, Mar 10, 2009 at 12:34 PM, Patrick Mullen <[email protected]>wrote: > Yep, changing the layer order is just a quick fix, not a real > solution. You can keep the layer order you had before, and add a > move_layers function to the map. Give the player a reference to the > map instead of the two layers, and call move_layers in the spots you > are setting the background.move and foreground.move. Map.move_layers > would look something like this: > > def move_layers(self, amount): > for layer in [self.background, self.foreground]: > layer.dirty = 1 > layer.rect.move_ip(amount) > > Actually, it might be even better to just make move a function instead > of an attribute on TileLayer. You will have to change less code (but > will still have the ugly bg/fg references in player). > > class TileLayer(pygame.sprite.DirtySprite): > def __init__(self, screen, layer, w, numx, h, numy): > self.screen = screen > pygame.sprite.DirtySprite.__init__(self) > if layer == 'fg': > self.image = pygame.Surface((w*numx,h*numy), > SRCALPHA, 32).convert_alpha() > else: > self.image = > pygame.Surface((w*numx,h*numy)).convert() > self.rect = self.image.get_rect() > > def move(self): > self.dirty = 1 > self.rect.move_ip(self.move) > > Then in player you would say: > self.background.move([self.movement, 0]) > self.foreground.move([self.movement, 0]) > > etc. Instead of assigning to those values. > > The real problem is that you are delaying an action until the update > functions when it is really (in this case) an in-place action. >
