2012-09-23 14 views
5

Próbuję programować w Pythonie. Jestem całkiem nowy w Pythonie i ogólnie w programowaniu komputerowym. Chcę móc projektować genialne gry i takie. Mam zamiar później nauczyć się C++, ale teraz będę po prostu trzymać się Pythona. Problem polega na tym, że staram się, aby moja postać poruszała się po przekątnej ekranu, gdy użytkownik naciśnie klawisz K_UP i klawisz K_RIGHT lub klawisz K_UP i klawisz K_DOWN, itd. Oto mój kod ruchu postaci (obsługa zdarzeń):Programowanie Pygame tak, że mogę nacisnąć wiele klawiszy naraz, aby moja postać przesunęła się po przekątnej.

1. #Event Handling 
2. for event in pygame.event.get(): 
3.  if event.type == pygame.QUIT: 
4.   sys.exit() 
5.  elif (event.type == KEYDOWN): 
6.   if ((event.key == K_ESCAPE) 
7.    or (event.key == K_q)): 
8.    sys.exit() 
9.   if (event.key == K_UP): 
10.   self.char_y = self.char_y - 10 
11.  if (event.key == K_DOWN): 
12.   self.char_y = self.char_y + 10 
13.  if (event.key == K_RIGHT): 
14.   self.char_x = self.char_x + 10 
15.  if (event.key == K_LEFT): 
16.   self.char_x = self.char_x - 10 

Z góry dziękuję.

+1

tylko sugestia: to długi łańcuch 'if's być może być lepiej wyrażone jako mapowania:' event_dict = {K_ESCAPE: sys.exit, K_UP: lambda: setattr (self, 'char_y', self.char_y-10)} 'etc, a następnie' event_dict [event.key]() ' –

+0

chciałbym również zasugerować czytanie OOP, jego kluczowe w grze. –

Odpowiedz

6

Można to zrobić poprzez pygame.key.get_pressed():

keys = pygame.key.get_pressed() 

if keys[K_LEFT]: 
    self.char_x += 10 

if keys[K_RIGHT]: 
    self.char_x -= 10 

if keys[K_UP]: 
    self.char_y -= 10 

if keys[K_DOWN]: 
    self.char_y += 10 
+0

Obawiam się, że gra będzie działać wolniej na starszych procesorach. –

+0

Czy ten kod powinien zostać umieszczony pod oryginalnym kodem, czy powinien go zastąpić? – David

+0

@coolbartek: większość starszych gier nie będzie działać wolniej? Co masz na myśli mówiąc konkretnie? –

Powiązane problemy