On Sun, Jan 15, 2012 at 7:46 PM, Ryan Strunk <ryan.str...@gmail.com> wrote:
> Hello everyone, > I am testing my understanding of the pygame.key module by creating a > program > that pans the sound of a car engine and raises/lowers its frequency. While > the individual keys do exactly what they're supposed to, I run into a big > problem when I try to do two things at once. For example, if I hold the up > arrow, the frequency of the sound rises with no problem. If I then hold > down > the left arrow while still holding up, however, the frequency stops rising > and the pan begins to adjust itself. How can I make both keys carry out > their assigned task at the same time? > As a side note, aside from exporting the redundant code below into its own > methods, are there any other ways to check for multiple keys without giving > each its own if check? > Ugly code is below: > > import pygame > from sound_lib.stream import FileStream > from sound_lib.output import Output > > def main(): > clock = pygame.time.Clock() > o = Output() > sound = FileStream(file="sounds/car.wav") > screen = pygame.display.set_mode((640, 400)) > sound.looping = True > sound.play() > pygame.key.set_repeat(50, 50) > while(True): > for event in pygame.event.get(): > if event.type == pygame.KEYDOWN: > if event.key == pygame.K_UP: > sound.frequency += 200 > if event.key == pygame.K_DOWN: > sound.frequency -= 200 > if event.key == pygame.K_LEFT: > if sound.pan <= -0.9: > sound.pan = -0.9 > else: > sound.pan -= 0.1 > if event.key == pygame.K_RIGHT: > if sound.pan >= 0.9: > sound.pan = 0.9 > else: > sound.pan += 0.1 > if event.key == pygame.K_ESCAPE: > exit() > clock.tick(10) > > if __name__ == '__main__': > main() > > Thanks, > Ryan > You should use pygame.key.get_pressed() to check whether the left/up keys are pressed. Something like: while pygame.event.get(): pass key = pygame.key.get_pressed() if key[K_LEFT]: #whatever if key[K_UP]: #whatever Ian