You're only updating 5 frames a second, so yu should expect delays of up to
0.2s, and if you tap the key fast enough it won't register. Why not change
the 5 to 50 or something?

-Christopher
On Feb 12, 2012 8:02 PM, "Ryan Strunk" <ryan.str...@gmail.com> wrote:

> Hi everyone,
> I apologize in advance for posting 43 lines of code, but I can't figure out
> where on Earth the trouble is coming from.
> When I run this code, the keys do exactly what I'd like, but I'm noticing a
> delay of a few tenths of a second between when I press the key and when the
> sound of the step is played. Further, sometimes when I tap an arrow key
> quickly, the player won't even take a step.
> Can anyone please tell me what I'm doing wrong? This looks sound to me.
>
> import time
> import pygame
> from sound_lib.stream import FileStream
> from sound_lib.output import Output
>
> class Player(object):
>
>        def __init__(self):
>                self.x = 10
>                self.step = FileStream(file="sounds/step.ogg")
>                self.step.pan = 0
>                self.step_time = 0.25
>                self.last_step_time = 0.0
>
>        def move(self, dir):
>                if time.time() - self.last_step_time <= self.step_time:
>                        return
>                if self.x + dir < 1 or self.x + dir > 20:
>                        return
>                self.x += dir
>                if dir > 0:
>                        self.step.pan += 0.1
>                else:
>                        self.step.pan -= 0.1
>                self.step.play(True)
>                self.last_step_time = time.time()
>
> def main():
>        clock = pygame.time.Clock()
>        o = Output()
>        guy = Player()
>        screen = pygame.display.set_mode((640, 400))
>        while(True):
>                keys = pygame.key.get_pressed()
>                if keys[pygame.K_LEFT]:
>                        guy.move(-1)
>                if keys[pygame.K_RIGHT]:
>                        guy.move(1)
>                for event in pygame.event.get(): pass
>                clock.tick(5)
>
> if __name__ == '__main__':
>        main()
>
> Thanks much,
> Ryan
>
>

Reply via email to