Mercurial > fhrl
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:
