From 8360689edb795c74178278beca4ec21deffde1d2 Mon Sep 17 00:00:00 2001 From: kleph Date: Sat, 15 Aug 2009 03:06:18 +0200 Subject: [PATCH] added "smooth" movement added function {start,stop}_move and separate detection of key press and release --- pyshoot.py | 69 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/pyshoot.py b/pyshoot.py index 6e20cab..85e53a7 100755 --- a/pyshoot.py +++ b/pyshoot.py @@ -55,7 +55,6 @@ class Object(pygame.sprite.Sprite): def move(self, dx, dy): """ move the object by adding deltas passed """ self.speed = (dx, dy) - globals.moving_objects.add(self) def update(self): self.rect.move_ip(self.speed) @@ -94,6 +93,20 @@ class Player(Object): bullet = globals.bulletfactory.create(0, self.rect.midright) globals.bullets_list.add(bullet) + def start_move(self, vector): + """ initiate moving sequence """ + globals.moving_objects.add(self) + self.speed = (self.speed[0] + vector[0], self.speed[1] + vector[1]) + if not globals.moving_objects.has(self): + print "error should contain self after start_move" + + def stop_move(self): + """ stop moving sequence """ + globals.moving_objects.remove(self) + self.speed = (0, 0) + if globals.moving_objects.has(self): + print "error should NOT contain self after stop_move" + def init_gfx(): """graphics initialisation""" @@ -135,21 +148,31 @@ def wait_keypress(): def process_key(event, player): """ process keyboard input """ - if event.key == K_ESCAPE: - globals.die = True - elif event.key == K_n: - player.move(0, 10) - pass - elif event.key == K_UP: - player.move(0, -10) - elif event.key == K_DOWN: - player.move(0, 10) - elif event.key == K_LEFT: - player.move(-10, 0) - elif event.key == K_RIGHT: - player.move(10, 0) - elif event.key == K_x: - player.shoot() + if event.type == KEYDOWN: + if event.key == K_ESCAPE: + globals.die = True + elif event.key == K_UP: + player.start_move((0, -1)) + elif event.key == K_DOWN: + player.start_move((0, 1)) + elif event.key == K_LEFT: + player.start_move((-1, 0)) + elif event.key == K_RIGHT: + player.start_move((1, 0)) + elif event.key == K_x: + player.start_shoot() + if event.type == KEYUP: + if event.key == K_UP: + player.stop_move() + elif event.key == K_DOWN: + player.stop_move() + elif event.key == K_LEFT: + player.stop_move() + elif event.key == K_RIGHT: + player.stop_move() + elif event.key == K_x: + player.stop_shoot() + ## # Main @@ -179,12 +202,9 @@ while not globals.die: # draw player #globals.screen.blit(player.image, player.pos) - #globals.moving_objects.clear(globals.screen, globals.background) - #globals.bullets_list.clear(globals.screen, globals.background) + globals.moving_objects.clear(globals.screen, globals.background) + globals.bullets_list.clear(globals.screen, globals.background) - for event in pygame.event.get(): - if event.type == KEYDOWN: - process_key(event, player) # erase moving objects globals.moving_objects.update() @@ -200,12 +220,13 @@ while not globals.die: nbframe = nbframe + 1 globals.clock.tick(60) - globals.moving_objects.clear(globals.screen, globals.background) - globals.bullets_list.clear(globals.screen, globals.background) + for event in pygame.event.get(): + if event.type == KEYDOWN or event.type == KEYUP: + process_key(event, player) # reinitializing moving objects list - globals.moving_objects = pygame.sprite.RenderUpdates() + #globals.moving_objects = pygame.sprite.RenderUpdates() print "frames : %d" % nbframe