Python 带键盘输入的PyGame帧速率
使用PyGame,我想创建一个在网格中移动的正方形,由键盘上的箭头键控制。因此,按“向上”键将正方形直接向上移动到单元格,按“向右”键将正方形直接向右移动到单元格,以此类推 在我的循环中,我使用Python 带键盘输入的PyGame帧速率,python,pygame,Python,Pygame,使用PyGame,我想创建一个在网格中移动的正方形,由键盘上的箭头键控制。因此,按“向上”键将正方形直接向上移动到单元格,按“向右”键将正方形直接向右移动到单元格,以此类推 在我的循环中,我使用pygame.time.wait(x),暂停xms。但是,为x选择正确的值很困难。如果x太大(例如1000),则方块不会立即响应,实际上我必须按住键才能使其移动。但是如果x太小(例如10),则每当我按键时,正方形将连续移动几次。但我只想让正方形每按一次键就移动一次。我该怎么做?谢谢 以下是我的代码的重要部
pygame.time.wait(x)
,暂停x
ms。但是,为x
选择正确的值很困难。如果x
太大(例如1000),则方块不会立即响应,实际上我必须按住键才能使其移动。但是如果x
太小(例如10),则每当我按键时,正方形将连续移动几次。但我只想让正方形每按一次键就移动一次。我该怎么做?谢谢
以下是我的代码的重要部分:
x = 100
current_pos = [0, 0]
while True:
pygame.event.pump() # process event queue
is_key_pressed = pygame.key.get_pressed()
if is_key_pressed[pygame.K_UP]:
current_pos[1] -= 1
elif is_key_pressed[pygame.K_RIGHT]:
current_pos[0] += 1
elif is_key_pressed[pygame.K_DOWN]:
current_pos[1] += 1
elif is_key_pressed[pygame.K_LEFT]:
current_pos[0] -= 1
show_map(current_pos)
pygame.time.wait(x)
与其检查按键的状态(无论是否按住),不如检查按键的按下或重新设定时间。可以通过将密钥保存到以前的状态并检查其状态是否已更改,或者使用事件循环来完成 使用关键状态:
was_pressed = pygame.key.get_pressed()
while True:
pygame.event.pump() # process event queue
key_is_pressed = pygame.key.get_pressed()
if key_is_pressed[pygame.K_UP] and not was_pressed[pygame.K_UP]:
current_pos[1] -= 1
elif key_is_pressed[pygame.K_RIGHT] and not was_pressed[pygame.K_RIGHT]:
current_pos[0] += 1
elif key_is_pressed[pygame.K_DOWN] and not was_pressed[pygame.K_DOWN]:
current_pos[1] += 1
elif key_is_pressed[pygame.K_LEFT] and not was_pressed[pygame.K_LEFT]:
current_pos[0] -= 1
was_pressed = key_is_pressed
使用事件循环:
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
current_pos[1] -= 1
elif event.key == pygame.K_UP:
current_pos[0] += 1
elif event.key == pygame.K_DOWN:
current_pos[1] += 1
elif event.key == pygame.K_LEFT:
current_pos[0] -= 1
与其检查按键的状态(无论是否按住),不如检查按键的按下或重新设定时间。可以通过将密钥保存到以前的状态并检查其状态是否已更改,或者使用事件循环来完成 使用关键状态:
was_pressed = pygame.key.get_pressed()
while True:
pygame.event.pump() # process event queue
key_is_pressed = pygame.key.get_pressed()
if key_is_pressed[pygame.K_UP] and not was_pressed[pygame.K_UP]:
current_pos[1] -= 1
elif key_is_pressed[pygame.K_RIGHT] and not was_pressed[pygame.K_RIGHT]:
current_pos[0] += 1
elif key_is_pressed[pygame.K_DOWN] and not was_pressed[pygame.K_DOWN]:
current_pos[1] += 1
elif key_is_pressed[pygame.K_LEFT] and not was_pressed[pygame.K_LEFT]:
current_pos[0] -= 1
was_pressed = key_is_pressed
使用事件循环:
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
current_pos[1] -= 1
elif event.key == pygame.K_UP:
current_pos[0] += 1
elif event.key == pygame.K_DOWN:
current_pos[1] += 1
elif event.key == pygame.K_LEFT:
current_pos[0] -= 1