Mercurial > mhrok
changeset 6:1f05f6b2e08b
Animation tweaks
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sun, 26 Feb 2012 00:16:13 +0100 |
| parents | 87f7a58587cd |
| children | c8ec5029a5f9 |
| files | mhrok.png mhrok.py |
| diffstat | 2 files changed, 52 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/mhrok.py Sat Feb 25 23:34:30 2012 +0100 +++ b/mhrok.py Sun Feb 26 00:16:13 2012 +0100 @@ -109,31 +109,15 @@ class Level(object): def __init__(self, tiles, (width, height), pc): - self.sprites = SortedUpdates() - self.shadows = pygame.sprite.RenderUpdates() - self.sprites.add(pc) - self.shadows.add(Shadow(pc.frames, pc)) - - bat = Bat(pc.frames, 2, 3) - self.sprites.add(bat) - self.shadows.add(Shadow(pc.frames, bat)) - - chest = Chest(pc.frames, 4, 2) - self.sprites.add(chest) - self.shadows.add(Shadow(pc.frames, chest)) - - skeleton = Skeleton(pc.frames, 5, 3) - self.sprites.add(skeleton) - self.shadows.add(Shadow(pc.frames, skeleton)) - - self.tiles = tiles self.background = pygame.Surface((width * 20 + 28, height * 12 + 36)) + blood = self.tiles[21].copy() + blood.set_alpha(220) for y in range(height): for x in range(width): self.background.blit(self.tiles[23], (x * 20 + 6, y * 12)) - if x == 1 and y == 2: - self.background.blit(self.tiles[21], (x * 20 + 6, y * 12)) + if (9*x + 5*y + 2) % (y+3) == 3: + self.background.blit(blood, (x * 20 + 6, y * 12)) for x in range(width): if x != 3: self.background.blit(self.tiles[4], (x * 20 + 6, 0)) @@ -148,39 +132,68 @@ else: self.background.blit(self.tiles[29], (6, y * 12)) self.background.blit(self.tiles[39], (width * 20 - 14, y * 12)) - self.first_draw = True - def draw(self, screen): - if self.first_draw: - screen.blit(self.background, (0, 0)) - self.shadows.draw(screen) - self.sprites.draw(screen) - self.first_draw = False - return self.background.get_rect() - self.sprites.clear(screen, self.background) - self.shadows.draw(screen) - dirty = self.sprites.draw(screen) - self.sprites.update() - self.shadows.update() - return dirty class Game(object): def __init__(self): pygame.display.init() - self.screen = pygame.display.set_mode((640, 400)) + self.screen = pygame.display.set_mode((320, 200)) pygame.display.set_caption('Mhrok') self.tiles = load_tiles('mhrok.png', 32, 32) self.clock = pygame.time.Clock() self.game_over = False - self.pc = PlayerCharacter(self.tiles, 0, 0) - self.level = Level(self.tiles, (5, 5), self.pc) + self.first_draw = True + + pc = PlayerCharacter(self.tiles, 0, 0) + self.pc = pc + self.level = Level(self.tiles, (10, 10), self.pc) + + self.background = pygame.Surface(self.screen.get_size()) + self.background.blit(self.level.background, (0, 0)) + + self.sprites = SortedUpdates() + self.shadows = pygame.sprite.RenderUpdates() + self.sprites.add(pc) + self.shadows.add(Shadow(self.tiles, pc)) + + bat = Bat(self.tiles, 2, 3) + self.sprites.add(bat) + self.shadows.add(Shadow(self.tiles, bat)) + + chest = Chest(self.tiles, 4, 2) + self.sprites.add(chest) + self.shadows.add(Shadow(self.tiles, chest)) + + skeleton = Skeleton(self.tiles, 5, 3) + self.sprites.add(skeleton) + self.shadows.add(Shadow(self.tiles, skeleton)) + + teddy = Teddybear(self.tiles, 7, 5) + self.sprites.add(teddy) + self.shadows.add(Shadow(self.tiles, teddy)) + + + def draw(self): + if self.first_draw: + self.screen.blit(self.background, (0, 0)) + self.shadows.draw(self.screen) + self.sprites.draw(self.screen) + self.first_draw = False + dirty = self.background.get_rect() + else: + self.sprites.clear(self.screen, self.background) + self.shadows.draw(self.screen) + dirty = self.sprites.draw(self.screen) + pygame.display.update(dirty) + def main(self): while not self.game_over: self.pc.control() - dirty = self.level.draw(self.screen) - pygame.display.update(dirty) + self.draw() + self.sprites.update() + self.shadows.update() self.clock.tick(15) for event in pygame.event.get(): if event.type == pg.QUIT or (
