Python 一次按多个键以使角色沿对角线移动

Python 一次按多个键以使角色沿对角线移动,python,events,pygame,keyboard-events,Python,Events,Pygame,Keyboard Events,我遇到的问题是,当用户按下K_向上键和K_向右键或K_向上键和K_向下键等时,我试图使我的角色在屏幕上沿对角线移动。以下是我的角色移动代码(事件处理): 您可以通过以下方式进行: 只是一个建议:ifs的长链可能更好地表示为一个映射:event_dict={K_ESCAPE:sys.exit,K_UP:lambda:setattr(self,'char_y',self.char_y-10)等,然后是event_dict[event.key]()我还建议一些面向对象的阅读,这在游戏开发中至关重要。我

我遇到的问题是,当用户按下K_向上键和K_向右键或K_向上键和K_向下键等时,我试图使我的角色在屏幕上沿对角线移动。以下是我的角色移动代码(事件处理):

您可以通过以下方式进行:


只是一个建议:
if
s的长链可能更好地表示为一个映射:
event_dict={K_ESCAPE:sys.exit,K_UP:lambda:setattr(self,'char_y',self.char_y-10)
等,然后是
event_dict[event.key]()
我还建议一些面向对象的阅读,这在游戏开发中至关重要。我担心这个游戏在旧CPU上运行会慢一些。这个代码应该放在原始代码下还是应该替换它?@coolbartek:大多数游戏在旧CPU上运行会慢一些吗?具体来说,你是什么意思?阅读我的答案,你想让角色以20px/秒的速度移动,而这里你以10px/周期的速度移动,其中周期速度取决于CPU速度。游戏将在较慢的机器上运行较慢,但角色将以相同的速度移动。(更新更少,但移动更多像素/周期)现在更清楚了吗?没关系。非常感谢你,黑胡子!我让它工作了D
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
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