Python 带键盘输入的PyGame帧速率

Python 带键盘输入的PyGame帧速率,python,pygame,Python,Pygame,使用PyGame,我想创建一个在网格中移动的正方形,由键盘上的箭头键控制。因此,按“向上”键将正方形直接向上移动到单元格,按“向右”键将正方形直接向右移动到单元格,以此类推 在我的循环中,我使用pygame.time.wait(x),暂停xms。但是,为x选择正确的值很困难。如果x太大(例如1000),则方块不会立即响应,实际上我必须按住键才能使其移动。但是如果x太小(例如10),则每当我按键时,正方形将连续移动几次。但我只想让正方形每按一次键就移动一次。我该怎么做?谢谢 以下是我的代码的重要部

使用PyGame,我想创建一个在网格中移动的正方形,由键盘上的箭头键控制。因此,按“向上”键将正方形直接向上移动到单元格,按“向右”键将正方形直接向右移动到单元格,以此类推

在我的循环中,我使用
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