Skip to main content
 首页 » 编程设计

python之pygame中的不断运动

2025年05月04日59xing901022

这是我的第一个 pygame 代码,内容不多,非常简单。当我想移动我的播放器时,它可以工作,但我希望移动平稳。就像当我向左按时,我希望它向左移动。目前,每次我都必须按下左按钮,以便播放器向左移动。您对如何做到这一点有什么建议吗?

import pygame, sys 
 
pygame.init() 
 
window_size = ( 400, 400 ) 
 
white = ( 255, 255, 255 ) 
 
class Player(): 
  image = pygame.image.load( 'foo.png') 
  rect = image.get_rect() 
 
player = Player() 
 
screen = pygame.display.set_mode( window_size ) 
 
done = False 
 
while not done: 
  for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
      sys.exit() 
 
    if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
        move = (-10, 0 ) 
        player.rect = player.rect.move(move) 
      if event.key == pygame.K_RIGHT: 
        move = ( 10, 0 ) 
        player.rect = player.rect.move(move) 
      if event.key == pygame.K_UP: 
        move = ( 0,-10 ) 
        player.rect = player.rect.move(move) 
      if event.key == pygame.K_DOWN: 
        move = ( 0, 10 ) 
        player.rect = player.rect.move(move) 
 
  screen.fill( white ) 
  screen.blit( player.image, player.rect ) 
 
  pygame.display.flip() 

编辑 我对亚伦回答的态度:

while not done: 
 
  for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
      sys.exit() 
 
  pressed = pygame.key.get_pressed() 
  if pressed[pygame.K_LEFT]: 
    move = ( 2, 0 ) 
    player.rect = player.rect.move(move) 
  if pressed[pygame.K_RIGHT]: 
    move = ( 2, 0 ) 
    player.rect = player.rect.move(move) 
  if pressed[pygame.K_UP]: 
    move = ( 0,-2 ) 
    player.rect = player.rect.move(move) 
  if pressed[pygame.K_DOWN]: 
    move = ( 0, 2 ) 
    player.rect = player.rect.move(move) 

请您参考如下方法:

您可以跟踪 KEYUP 和 KEYDOWN 事件,然后为您跟踪的每个键存储按下状态。

现在,不是在用户按下某个键时移动播放器,而是测试键的状态以查看它是否被按下,如果是则向播放器应用移动。

举个简单的例子:

pressed_keys = { 
    'left': false, 
    ...define other keys... 
} 
 
while not done: 
 
    # Check for key events 
    for event in pygame.event.get(): 
        if event.type == pygame.KEYDOWN: 
            if event.key == pygame.K_LEFT: 
                pressed_keys['left'] = True 
            ...check other keys... 
 
        if event.type == pygame.KEYUP: 
            if event.key == pygame.K_LEFT: 
                pressed_keys['left'] = False 
            ...check other keys... 
 
   # Move the player 
   if pressed_keys['left']: 
       ...move player left...