Mercurial > skaapsteker
changeset 186:72e92893ccb8
Use layers for floor check
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 06 Apr 2011 20:49:47 +0200 |
parents | c3dfcd241c3a |
children | 92ab784ecf5a |
files | skaapsteker/physics.py skaapsteker/sprites/base.py |
diffstat | 2 files changed, 7 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/skaapsteker/physics.py Wed Apr 06 20:36:58 2011 +0200 +++ b/skaapsteker/physics.py Wed Apr 06 20:49:47 2011 +0200 @@ -44,6 +44,7 @@ self.velocity = (0.0, 0.0) self.rect = pygame.Rect(0, 0, 10, 10) # sub-classes should override self.collide_rect = pygame.Rect(0, 0, 10, 10) # rectangle we use for collisions + self.floor_rect = self.collide_rect self.image = pygame.Surface((10, 10)) self.image.fill((0, 0, 200)) self.collision_group = None @@ -83,6 +84,7 @@ self.rect.topleft = int(f_x), int(f_y) delta_pos = self.rect.left - old_pos[0], self.rect.top - old_pos[1] self.collide_rect.move_ip(delta_pos) + self.floor_rect.move_ip(delta_pos) def _check_mask(self): mask = self._mask_cache.get(id(self.image)) @@ -267,14 +269,14 @@ # Check if we are still in contact with the ground still_on_solid = False for other in self._collision_groups[sprite.collision_layer]: - if (other.floor or other.block) and collides(other.collide_rect): + if (other.floor or other.block) and collides(other.floor_rect): still_on_solid = True break sprite.on_solid = still_on_solid else: # Are we currently in contact with the ground for other in self._collision_groups[sprite.collision_layer]: - if (other.floor or other.block) and collides(other.collide_rect): + if (other.floor or other.block) and collides(other.floor_rect): sprite.on_solid = True break
--- a/skaapsteker/sprites/base.py Wed Apr 06 20:36:58 2011 +0200 +++ b/skaapsteker/sprites/base.py Wed Apr 06 20:49:47 2011 +0200 @@ -30,6 +30,7 @@ self.starting_tile_pos = pos self.rect = self.image.get_rect(midbottom=(pos[0]*TILE_SIZE[0]+TILE_SIZE[0]/2, (pos[1]+1)*TILE_SIZE[1])) self.collide_rect = self.rect.move(0, 0) + self.floor_rect = Rect(self.collide_rect.topleft, (self.collide_rect.width, 2)) self._layer = Layers.PLAYER self.setup(**opts) @@ -82,9 +83,11 @@ self.tile_pos = pos self.image = image self.collide_rect = self.image.get_bounding_rect(1) + self.floor_rect = Rect(self.collide_rect.topleft, (self.collide_rect.width, 2)) self.rect = self.image.get_rect() self.rect_offset = self.collide_rect.left - self.rect.left, self.rect.top - self.rect.top self.collide_rect.topleft = pos[0] * TILE_SIZE[0] + self.rect_offset[0], pos[1] * TILE_SIZE[1] + self.rect_offset[1] + self.floor_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 get_debug_color(self):