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':