changeset 6:fc17045bef2f

smooth scrolling
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Mon, 11 Mar 2013 23:40:17 +0100
parents 87e2727bb411
children 006f78dd763f
files fhrl/__main__.py
diffstat 1 files changed, 24 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/fhrl/__main__.py	Mon Mar 11 23:00:24 2013 +0100
+++ b/fhrl/__main__.py	Mon Mar 11 23:40:17 2013 +0100
@@ -171,18 +171,28 @@
         for m in self.level.monsters:
             self.sprites.add(m)
 
+    def _scroll_anim(self, dx, dy):
+        frame = 0
+        while dx or dy:
+            ddx =  dx and dx // abs(dx)
+            ddy = dy and dy // abs(dy)
+            self.x -= ddx
+            self.y -= ddy
+            dx -= ddx
+            dy -= ddy
+            for s in self.sprites:
+                s.rect.move_ip(-ddx, -ddy)
+            frame += 1
+            if not frame % 6:
+                self.update_all()
+                yield
+        self.update_all()
+
     def scroll_by(self, dx, dy):
         w, h = self.background.get_size()
         dx = min(max(self.x, dx), self.x+w-self.width)
         dy = min(max(self.y, dy), self.y+h-self.height)
-        for s in self.sprites:
-            s.rect.move_ip(-dx, -dy)
-        self.x -= dx
-        self.y -= dy
-        self.screen.fill((0x66, 0x66, 0x66))
-        self.screen.blit(self.background, (self.x, self.y))
-        self.sprites.draw(self.screen)
-        pygame.display.flip()
+        self.animations.append(self._scroll_anim(dx, dy))
 
     def _sprite_clear(self, screen, rect):
         source = rect.move(-self.x, -self.y)
@@ -196,8 +206,13 @@
         pygame.display.update(dirty)
         self.clock.tick(24)
 
+    def update_all(self):
+        self.screen.blit(self.background, (self.x, self.y))
+        self.sprites.draw(self.screen)
+        pygame.display.flip()
+
     def run(self):
-        self.scroll_by(0, 0)
+        self.update_all()
         while True:
             self.animations = []
             while not self.animations: