[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [pygame] how to bind surface rects without subsurface (need help with bug)
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.