Mercurial > blow
changeset 7:edcfcb6a5132
Reorganize animations
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sun, 28 Apr 2013 12:01:13 +0200 |
| parents | c4fd5827cb42 |
| children | 8dff86c114fb |
| files | blow/beast.png blow/effects.png blow/game_scene.py blow/scene.py blow/sprite.py |
| diffstat | 5 files changed, 57 insertions(+), 40 deletions(-) [+] |
line wrap: on
line diff
--- a/blow/game_scene.py Sun Apr 28 09:55:41 2013 +0200 +++ b/blow/game_scene.py Sun Apr 28 12:01:13 2013 +0200 @@ -13,8 +13,8 @@ super(SlowingSprite, self).__init__(*args, **kwargs) self.dx, self.dy = 0.0, 0.0 - def update(self, tick): - super(SlowingSprite, self).update(tick) + def update(self, tick, scene): + super(SlowingSprite, self).update(tick, scene) self.dx = 0.95 * self.dx self.dy = 0.95 * self.dy @@ -25,8 +25,8 @@ self.dx, self.dy = 0, 0 self.bounce = False - def update(self, tick): - super(FallingSprite, self).update(tick) + def update(self, tick, scene): + super(FallingSprite, self).update(tick, scene) dy = min(self.dy, BOTTOM - self.rect.bottom) self.rect.move_ip(self.dx, dy) if not self.on_ground(): @@ -41,8 +41,8 @@ class JumpingSprite(FallingSprite): - def update(self, tick): - super(JumpingSprite, self).update(tick) + def update(self, tick, scene): + super(JumpingSprite, self).update(tick, scene) if self.on_ground() and self.can_jump(): self.dy = -4 @@ -55,14 +55,41 @@ super(TreeSprite, self).__init__(*args, **kwargs) self.depth = -1 + def update(self, tick, scene): + super(TreeSprite, self).update(tick, scene) + if self.rect.right < 0: + self.rect.left = 768 + elif self.rect.left > 768: + self.rect.right = 0 + class HeroSprite(JumpingSprite, Sprite): def __init__(self, *args, **kwargs): super(HeroSprite, self).__init__(*args, **kwargs) self.depth = 3 + self.sword = None - def update(self, tick): - super(HeroSprite, self).update(tick) + def update(self, tick, scene): + super(HeroSprite, self).update(tick, scene) + if self.sword is None: + self.sword = SwordSprite(self, scene.resources.weapons) + scene.sprites.add(self.sword) + keys = pygame.key.get_pressed() + if keys[pygame.K_LEFT]: + self.rect.move_ip(-6, 0) + for sprite in scene.sprites: + sprite.rect.move_ip(6, 0) + elif keys[pygame.K_RIGHT]: + self.rect.move_ip(6, 0) + for sprite in scene.sprites: + sprite.rect.move_ip(-6, 0) + if keys[pygame.K_UP]: + if self.can_jump(): + self.dy = -16 + if keys[pygame.K_SPACE]: + if self.sword.animation is None: + self.sword.animation = self.sword.swing_animation(scene) + self.dy = -2 class SkeletonSprite(JumpingSprite, SlowingSprite, Sprite): @@ -72,8 +99,8 @@ self.depth = 1 self.stun = False - def update(self, tick): - super(SkeletonSprite, self).update(tick) + def update(self, tick, scene): + super(SkeletonSprite, self).update(tick, scene) if self.can_jump() and not self.stun: if self.rect.left < 0: self.wx = 4 @@ -102,15 +129,19 @@ self.depth = 5 self.sx, self.sy = 0, 0 - def update(self, tick): - super(SwordSprite, self).update(tick) + def update(self, tick, scene): + super(SwordSprite, self).update(tick, scene) x, y = self.owner.rect.midleft self.rect.center = x + self.sx, y + self.sy - def swing_animation(self): + def swing_animation(self, scene): + scene.resources.swoosh.play() self.image = self.frames[2] self.sx, self.sy = 64, 0 yield + swoosh = SwooshSprite(scene.resources.effects) + swoosh.rect.midtop = self.owner.rect.topright + scene.sprites.add(swoosh) yield self.image = self.frames[3] self.sx, self.sy = 64, 14 @@ -143,6 +174,15 @@ yield self.kill() + def update(self, tick, scene): + super(SwooshSprite, self).update(tick, scene) + monster = pygame.sprite.spritecollideany( + self, scene.monsters, pygame.sprite.collide_mask) + if monster and monster.animation is None: + monster.animation = monster.stun_animation() + monster.dx = 12 + monster.dy = -8 + class GameScene(Scene): def __init__(self, display, resources): @@ -150,9 +190,8 @@ self.monsters = pygame.sprite.Group() self.background.fill((0xf0, 0xf0, 0xf0)) self.hero = HeroSprite(self.resources.hero) + self.hero.rect.midbottom = (128, BOTTOM) self.sprites.add(self.hero) - self.sword = SwordSprite(self.hero, self.resources.weapons) - self.sprites.add(self.sword) skeleton = SkeletonSprite(self.resources.skeleton) skeleton.stun_sound = self.resources.hit @@ -172,26 +211,4 @@ def update(self, *args, **kwargs): super(GameScene, self).update(*args, **kwargs) - keys = pygame.key.get_pressed() - if keys[pygame.K_LEFT]: - self.hero.rect.move_ip(-6, 0) - elif keys[pygame.K_RIGHT]: - self.hero.rect.move_ip(6, 0) - if keys[pygame.K_UP]: - if self.hero.can_jump(): - self.hero.dy = -16 - if keys[pygame.K_SPACE]: - if self.sword.animation is None: - self.resources.swoosh.play() - self.sword.animation = self.sword.swing_animation() - self.hero.dy = -2 - swoosh = SwooshSprite(self.resources.effects) - swoosh.rect.midtop = self.hero.rect.topright - self.sprites.add(swoosh) - monster = pygame.sprite.spritecollideany( - swoosh, self.monsters, pygame.sprite.collide_mask) - if monster: - monster.animation = monster.stun_animation() - monster.dx = 12 - monster.dy = -8
--- a/blow/scene.py Sun Apr 28 09:55:41 2013 +0200 +++ b/blow/scene.py Sun Apr 28 12:01:13 2013 +0200 @@ -12,6 +12,6 @@ def update(self, first=False): tick = self.display.update(self.background, self.sprites, first) - self.sprites.update(tick) + self.sprites.update(tick, self)
--- a/blow/sprite.py Sun Apr 28 09:55:41 2013 +0200 +++ b/blow/sprite.py Sun Apr 28 12:01:13 2013 +0200 @@ -20,8 +20,8 @@ self.rect.midbottom = pos self.animation = None - def update(self, tick): - super(Sprite, self).update(tick) + def update(self, tick, scene): + super(Sprite, self).update(tick, scene) if self.animation: try: self.animation.next()
