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