Mercurial > mamba
changeset 188:d76c069164c0
Much better interaction detection.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 17:41:26 +0200 |
parents | 3449b51ae944 |
children | aeacd8dfeb07 |
files | mamba/snake.py mamba/world.py |
diffstat | 2 files changed, 14 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mamba/snake.py Wed Sep 14 16:31:51 2011 +0200 +++ b/mamba/snake.py Wed Sep 14 17:41:26 2011 +0200 @@ -1,6 +1,6 @@ """The player snake object.""" -from pygame.sprite import Group +from pygame.sprite import Group, spritecollide from pygame.locals import BLEND_MULT from mamba.constants import TILE_SIZE @@ -45,16 +45,15 @@ shifted, ds = self.head.shift_head(ds) if not shifted: break - world.interact(self.head) self.head.set_orientation(self.orientation) for segment in self.segments[1:]: old_tile_state = segment.get_tile_state() segment.shift_tile(tile_state) tile_state = old_tile_state - world.interact(segment) for segment in self.segments: segment.shift_pixels(ds) + world.interact(segment) def set_orientation(self, orientation): self.orientation = orientation @@ -89,6 +88,16 @@ self.make_images() self.update_image() self.set_tile_pos(tile_pos) + self.on_tiles = [] + + def filter_collisions(self, group): + collide = [] + tiles = spritecollide(self, group, False) + for tile in tiles: + if tile not in self.on_tiles: + collide.append(tile) + self.on_tiles = tiles + return collide def set_base_image(self, image_name): self._base_image = "/".join(["snake", image_name])
--- a/mamba/world.py Wed Sep 14 16:31:51 2011 +0200 +++ b/mamba/world.py Wed Sep 14 17:41:26 2011 +0200 @@ -29,8 +29,8 @@ self.snake.update(dt, self) def interact(self, segment): - tile = self.level.get_tile(segment.tile_pos) - if tile is not None and tile.alive: + tiles = segment.filter_collisions(self.level.sprites) + for tile in tiles: tile.interact(self.snake, segment) def restart(self):