如何设置我的角色在 PyGame 中只要按住任意键就移动?

问题描述 投票:0回答:1

我正在 PyGame 中创建一个简单的游戏。但问题是,每当我按住某个键时,我的角色会在一步后停止移动,直到我释放该键并再次按下它为止。代码如下。


pygame.init()

screen_width = 800
screen_height = 800

screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("SPACE INVADER")
icon = pygame.image.load("game-controller.png")
pygame.display.set_icon(icon)

player_img = pygame.image.load("Webp.net-resizeimage.png")
playerX = 400
playerY = 700
playerX_change = 0


def player(x, y):
    screen.blit(player_img, (x, y))


running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -5
            if event.key == pygame.K_RIGHT:
                playerX_change = 5
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0

        playerX += playerX_change
        screen.fill((0, 0, 0))
        player(playerX, playerY)
        pygame.display.update()
python events pygame game-physics game-development
1个回答
2
投票

这是一个缩进的问题。您必须在应用程序循环而不是事件循环中移动对象并更新场景:

running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -5
            if event.key == pygame.K_RIGHT:
                playerX_change = 5
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0

    # INDENTATION

    #<--|

    playerX += playerX_change
    screen.fill((0, 0, 0))
    player(playerX, playerY)
    pygame.display.update()

但是,请使用

pygame.key.get_pressed()
而不是键盘事件。

running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        playerX -= 5
    if keys[pygame.K_RIGHT]:
        playerX += 5

    playerX += playerX_change
    screen.fill((0, 0, 0))
    player(playerX, playerY)
    pygame.display.update()

说明:

键盘事件(参见 pygame.event 模块)仅在按键状态更改时发生一次。每次按下某个键时,都会发生一次

KEYDOWN
事件。每次释放按键时都会出现一次
KEYUP
。使用键盘事件进行单个操作或逐步移动。

pygame.key.get_pressed()
返回包含每个键状态的列表。如果按住某个键,则该键的状态为
True
,否则为
False
。使用
pygame.key.get_pressed()
评估按钮的当前状态并获得连续移动。

© www.soinside.com 2019 - 2024. All rights reserved.