2012-09-23 24 views
5

Tôi đang cố gắng lập trình bằng Python. Tôi khá mới với Python và lập trình máy tính nói chung. Tôi muốn có thể thiết kế các trò chơi sáng chói và như vậy. Tôi dự định sau này sẽ học C + +, nhưng bây giờ tôi sẽ chỉ gắn bó với python. Vì vậy, vấn đề tôi gặp phải là tôi đang cố gắng làm cho nhân vật của tôi di chuyển theo đường chéo trên màn hình khi người dùng nhấn phím K_UP và phím K_RIGHT hoặc phím K_UP và phím K_DOWN, vv Đây là mã của tôi để di chuyển nhân vật (xử lý sự kiện):Lập trình Pygame để tôi có thể nhấn nhiều phím cùng lúc để nhân vật của tôi di chuyển theo đường chéo

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 

Xin cảm ơn trước.

+1

Chỉ cần một gợi ý: đó là chuỗi dài của 'if's có lẽ có thể được thể hiện tốt hơn như một ánh xạ:' event_dict = {K_ESCAPE: sys.exit, K_UP: lambda: setattr (self, 'char_y', self.char_y-10)} 'etc, tiếp theo là' event_dict [event.key]() ' –

+0

tôi cũng gợi ý một số đọc OOP, nó rất quan trọng trong game dev. –

Trả lời

6

Bạn có thể làm điều đó thông qua 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

Tôi sợ trò chơi này sẽ chạy chậm hơn trên các CPU cũ hơn –

+0

Mã này có nên được đặt dưới mã gốc hay nó nên thay thế nó? – David

+0

@coolbartek: hầu hết các game đều chạy chậm hơn trên các CPU cũ hơn? Ý bạn là gì? –