Mercurial > skaapsteker
diff skaapsteker/sprites/player.py @ 122:51bcc909873d
Saner, buggier collision rectangles
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Mon, 04 Apr 2011 22:39:42 +0200 |
parents | 9b08afeadf06 |
children | 6b488e1351a5 |
line wrap: on
line diff
--- a/skaapsteker/sprites/player.py Mon Apr 04 22:37:59 2011 +0200 +++ b/skaapsteker/sprites/player.py Mon Apr 04 22:39:42 2011 +0200 @@ -18,6 +18,7 @@ def __init__(self): Sprite.__init__(self) self.image = None + self.rect = None self._image_dict = {} self._animation_frame = 0.0 # State flags and such @@ -37,7 +38,17 @@ images = self._image_dict[key] if self._animation_frame >= len(images): self._animation_frame = 0.0 + if self.rect: + cur_pos = self.rect.topleft + else: + cur_pos = (0, 0) self.image = images[int(self._animation_frame)] + self.rect = self.image.get_rect() + self.collide_rect = self.image.get_bounding_rect(1) + self.rect_offset = self.collide_rect.left - self.rect.left, self.collide_rect.top - self.rect.top + self.rect.topleft = cur_pos + self.collide_rect.topleft = cur_pos[0] + self.rect_offset[0], cur_pos[1] + self.rect_offset[1] + def update(self): v_x, v_y = self.velocity @@ -51,10 +62,11 @@ def set_facing(self, new_facing): self.facing = new_facing + def set_pos(self, pos): self.starting_tile_pos = pos - self.rect = self.image.get_rect(topleft=(pos[0]*TILE_SIZE[0], pos[1]*TILE_SIZE[1])) - self.rect.inflate_ip(-10, -10) + self.collide_rect.topleft = pos[0] * TILE_SIZE[0] + self.rect_offset[0], pos[1] * TILE_SIZE[1] + self.rect_offset[1] + self.rect.topleft = pos[0] * TILE_SIZE[0], pos[1] * TILE_SIZE[1] def action_left(self): if self.facing != 'left':