Mercurial > helpings
changeset 2:b2d80429bbe2
Basic animation
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 24 Aug 2013 10:06:55 +0200 |
| parents | 50e04015a970 |
| children | a5e5b893fd75 |
| files | helpings/__main__.py helpings/display.py helpings/player.py |
| diffstat | 3 files changed, 53 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/helpings/__main__.py Sat Aug 24 09:41:11 2013 +0200 +++ b/helpings/__main__.py Sat Aug 24 10:06:55 2013 +0200 @@ -4,20 +4,23 @@ import pygame from helpings.resources import load_atlas +from helpings.display import Display +from helpings.player import PlayerSprite pygame.init() -screen = pygame.display.set_mode((800, 600)) -clock = pygame.time.Clock() -cook_frames = load_atlas('cook.png', 80) +display = Display() floor_tiles = load_atlas('floor.png', 64) for y in range(10): for x in range(10): - screen.blit(floor_tiles[0][0], (x * 64, y * 64)) -screen.blit(cook_frames[0][0], (0, 0)) -pygame.display.flip() + display.background.blit(floor_tiles[0][0], (x * 64, y * 64)) + +cook = PlayerSprite() +display.sprites.add(cook) +display.redraw() + while True: for event in pygame.event.get(): if event.type == pygame.QUIT: raise SystemExit() - clock.tick(3) + display.update()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/helpings/display.py Sat Aug 24 10:06:55 2013 +0200 @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +import pygame + + +class SortedUpdates(pygame.sprite.RenderUpdates): + """Sprite group with a depth for controlling drawing order.""" + + def sprites(self): + return sorted(self.spritedict.keys(), + key=lambda sprite: getattr(sprite, "depth", 0)) + + + +class Display(object): + def __init__(self): + self.size = 800, 600 + self.scroll = 0, 0 + self.fps = 12 + self.screen = pygame.display.set_mode(self.size) + self.clock = pygame.time.Clock() + self.background = pygame.Surface(self.size) + self.sprites = SortedUpdates() + self.redraw() + + def redraw(self): + self.screen.blit(self.background, self.scroll) + self.sprites.draw(self.screen) + pygame.display.flip() + + def update(self): + self.sprites.clear(self.screen, self.background) + self.sprites.update() + dirty = self.sprites.draw(self.screen) + pygame.display.update(dirty) + self.clock.tick(self.fps)
--- a/helpings/player.py Sat Aug 24 09:41:11 2013 +0200 +++ b/helpings/player.py Sat Aug 24 10:06:55 2013 +0200 @@ -14,13 +14,17 @@ self.rect = self.image.get_rect() def update(self): - self.animation.next() + try: + self.animation.next() + except StopIteration: + self.animation = self.walking_anim() + self.animation.next() def walking_anim(self): self.image = self.frames[0][0] - for tick in range(4): + for tick in range(3): yield self.image = self.frames[0][1] - for tick in range(4): + for tick in range(3): yield
