Mercurial > pavulon
changeset 10:b87fd9e8c365
more detailed skeleton animation
| author | Radomir Dopieralski <moindev@sheep.art.pl> |
|---|---|
| date | Wed, 27 Aug 2008 19:56:05 +0200 |
| parents | 31534af99229 |
| children | a6f9541f58b1 |
| files | level.map qq.py skeleton.png |
| diffstat | 3 files changed, 28 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/level.map Wed Aug 27 18:11:36 2008 +0200 +++ b/level.map Wed Aug 27 19:56:05 2008 +0200 @@ -1,21 +1,23 @@ [level] +tileset = dungeon.png \#: wall \.: floor \@: player \S: skeleton \b: crate +\>: stairs map: ###.########### #.......#.#.#.# - #......#.#.#.## + #.>....#.#.#.## #...@.......#.# #......s...#.## - #...........#.. + #.............. ##.#.#.#...#.## - #.#.#.#.....#.# - ##.#.b.#......# + #...........#.# + ##.#.#.#......# ...........s..# - ##.##.###.....# - #..##.###...#.# + ##.##.###..b..# + #..##.###.bb#.# ##.##.###....## #.....###...#.# ###############
--- a/qq.py Wed Aug 27 18:11:36 2008 +0200 +++ b/qq.py Wed Aug 27 19:56:05 2008 +0200 @@ -99,9 +99,8 @@ def stand_animation(self): while True: - for frame in self.frames: - self.image = frame[0] - yield None + for frame in self.frames[0]: + self.image = frame yield None yield None @@ -161,6 +160,7 @@ 'floor': 1, 'skeleton': Skeleton, 'crate': Crate, + 'stairs': 4, } def __init__(self, filename="level.map"): parser = ConfigParser.ConfigParser() @@ -172,7 +172,8 @@ if option.startswith('\\'): self.key[option[1]] = parser.get("level", option).strip() tile_width, tile_height = 24, 16 - self.tiles = load_tiles("dungeon.png", tile_width, tile_height) + self.tiles = load_tiles(parser.get("level", "tileset"), + tile_width, tile_height) width = len(self.map[0]) height = len(self.map) self.image = pygame.Surface((width*tile_width, height*tile_height)) @@ -183,8 +184,16 @@ for c in line: tile = self.item_names[self.key[c]] if tile: - self.image.blit(self.tiles[0][3], (x*tile_width, y*tile_height)) + # floor + if isinstance(tile, int): + floor = tile + else: + floor = 1 + self.items[(x, y)] = tile((x, y)) + self.image.blit(self.tiles[floor-1][3], + (x*tile_width, y*tile_height)) else: + # wall if self(x, y+1): if self(x+1, y) and self(x-1, y): tile_image = self.tiles[3][2] @@ -214,8 +223,6 @@ else: overlay_image = self.tiles[1][0] self.overlays[(x, y)] = overlay_image - if tile != 1 and tile != 0: - self.items[(x, y)] = tile x += 1 y += 1 @@ -241,9 +248,8 @@ self.sprites = SortedUpdates() self.overlays = pygame.sprite.RenderUpdates() self.level = level - for pos, kind in level.items.iteritems(): - item = kind(pos) - if kind == Player: + for pos, item in level.items.iteritems(): + if isinstance(item, Player): self.player = item self.sprites.add(item) self.shadows.add(Shadow(item)) @@ -286,8 +292,12 @@ self.control() self.player.update() self.shadows.update() + # Don't add shadows to dirty rectangles, as they already fit inside + # sprite rectangles. self.shadows.draw(self.screen) dirty = self.sprites.draw(self.screen) + # Don't add ovelays to dirty rectangles, only the places where + # sprites are need to be updated. self.overlays.draw(self.screen) pygame.display.update(dirty) clock.tick(15)
