Mercurial > blow
changeset 4:a6a9f884fb4a
Sword swinging
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 27 Apr 2013 21:12:36 +0200 |
| parents | 800c444c6a11 |
| children | 359046dd78bb |
| files | blow/effects.png blow/game_scene.py blow/resources.py blow/skeleton.png blow/sprite.py blow/weapons.png |
| diffstat | 6 files changed, 95 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/blow/game_scene.py Sat Apr 27 15:35:00 2013 +0200 +++ b/blow/game_scene.py Sat Apr 27 21:12:36 2013 +0200 @@ -33,21 +33,102 @@ class HeroSprite(JumpingSprite, Sprite): + def __init__(self, *args, **kwargs): + super(HeroSprite, self).__init__(*args, **kwargs) + self.depth = 3 + def update(self, tick): - keys = pygame.key.get_pressed() - if keys[pygame.K_LEFT]: - self.rect.move_ip(-6, 0) - elif keys[pygame.K_RIGHT]: - self.rect.move_ip(6, 0) - if keys[pygame.K_UP]: - if self.on_ground(): - self.dy = -24 super(HeroSprite, self).update(tick) + def can_jump(self): + return self.dy >= -4 and self.rect.bottom >= BOTTOM - 8 + + +class SkeletonSprite(JumpingSprite, Sprite): + def __init__(self, *args, **kwargs): + super(FallingSprite, self).__init__(*args, **kwargs) + self.dx, self.dy = -4, 0 + self.depth = 1 + + def update(self, tick): + super(SkeletonSprite, self).update(tick) + if self.rect.left < 0: + self.dx = 4 + elif self.rect.right > 780: + self.dx = -4 + +class SwordSprite(Sprite): + def __init__(self, owner, *args, **kwargs): + super(SwordSprite, self).__init__(*args, **kwargs) + self.owner = owner + self.depth = 5 + self.sx, self.sy = 0, 0 + + def update(self, tick): + super(SwordSprite, self).update(tick) + x, y = self.owner.rect.midleft + self.rect.center = x + self.sx, y + self.sy + + def swing_animation(self): + self.image = self.frames[2] + self.sx, self.sy = 64, 0 + yield + yield + self.image = self.frames[3] + self.sx, self.sy = 64, 14 + yield + yield + self.image = self.frames[1] + self.sx, self.sy = 64, 18 + yield + yield + self.image = self.frames[0] + self.sx, self.sy = 0, 0 + yield + yield + + +class SwooshSprite(Sprite): + def __init__(self, *args, **kwargs): + super(SwooshSprite, self).__init__(*args, **kwargs) + self.image = self.image.copy().convert() + self.animation = self.swoosh_animation() + self.depth = 9 + + def swoosh_animation(self): + for opacity in xrange(128, 0, -16): + self.image.set_alpha(opacity) + self.rect.move_ip(0, -1) + yield + self.kill() + class GameScene(Scene): def __init__(self, display, resources): super(GameScene, self).__init__(display, resources) - self.background.fill((0xff, 0xff, 0xff)) - self.sprites.add(HeroSprite(self.resources.hero)) + self.background.fill((0xfe, 0xfd, 0xff)) + self.hero = HeroSprite(self.resources.hero) + self.sprites.add(self.hero) + self.sword = SwordSprite(self.hero, self.resources.weapons) + self.sprites.add(self.sword) + skeleton = SkeletonSprite(self.resources.skeleton) + skeleton.rect.move_ip(716, 0) + self.sprites.add(skeleton) + 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.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)
--- a/blow/resources.py Sat Apr 27 15:35:00 2013 +0200 +++ b/blow/resources.py Sat Apr 27 21:12:36 2013 +0200 @@ -11,6 +11,9 @@ class Resources(object): def __init__(self): self.hero = self.load_atlas('hero.png', 64, 64) + self.skeleton = self.load_atlas('skeleton.png', 64, 64) + self.weapons = self.load_atlas('weapons.png', 64, 64) + self.effects = self.load_atlas('effects.png', 64, 64) @staticmethod def load_sound(filename):
--- a/blow/sprite.py Sat Apr 27 15:35:00 2013 +0200 +++ b/blow/sprite.py Sat Apr 27 21:12:36 2013 +0200 @@ -6,7 +6,7 @@ class SortedUpdates(pygame.sprite.RenderUpdates): def sprites(self): return sorted(self.spritedict.keys(), - key=lambda s: s.rect.bottom + getattr(s, 'depth', 0)) + key=lambda s: getattr(s, 'depth', 0)) class Sprite(pygame.sprite.Sprite):
