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.
>

Reply via email to