按住键时如何使精灵移动

新手上路,请多包涵

目前,每次按下一个键时,精灵只会移动 1 个像素。当按住左键或右键时,如何使水管工精灵不断移动?

 while running:
    setup_background()
    spriteimg = plumberright

    screen.blit(spriteimg,(x1, y1))

    for event in pygame.event.get():
         if event.type == pygame.QUIT:
             running = False
         elif event.type == pygame.KEYDOWN:
             if event.key == pygame.K_UP:
                 x1 = x1 + 0
                 y1 = y1 - 1
             elif event.key == pygame.K_DOWN:
                 x1 = x1 + 0
                 y1 = y1 + 1
             elif event.key == pygame.K_LEFT:
                 x1 = x1 -1
                 y1 = y1 + 0
             elif event.key == pygame.K_RIGHT:
                 x1 = x1 + 1
                 y1 = y1 + 0

    pygame.display.flip()
    clock.tick(120)

原文由 enrique2334 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 532
2 个回答

您可以使用 pygame.key.get_pressed 来做到这一点。

例子:

 while running:
    keys = pygame.key.get_pressed()  #checking pressed keys
    if keys[pygame.K_UP]:
        y1 -= 1
    if keys[pygame.K_DOWN]:
        y1 += 1

原文由 qiao 发布,翻译遵循 CC BY-SA 3.0 许可协议

键盘事件(请参阅 pygame.event 模块)仅在键状态更改时发生一次。 KEYDOWN 每次按下一个键时都会发生一次事件。 KEYUP 每次释放一个键时发生一次。使用键盘事件进行单个操作或逐步移动。

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

 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]:
        x1 -= 1
    if keys[pygame.K_RIGHT]:
        x1 += 1
    if keys[pygame.K_UP]:
        y1 -= 1
    if keys[pygame.K_DOWN]:
        y1 += 1

    setup_background()
    spriteimg = plumberright
    screen.blit(spriteimg, (x1, y1))

    pygame.display.flip()
    clock.tick(100)


另见 键和键盘事件

最小的例子: repl.it/@Rabbid76/PyGame-ContinuousMovement

 import pygame

pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()

rect = pygame.Rect(0, 0, 20, 20)
rect.center = window.get_rect().center
vel = 5

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            print(pygame.key.name(event.key))

    keys = pygame.key.get_pressed()

    rect.x += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * vel
    rect.y += (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * vel

    rect.centerx = rect.centerx % window.get_width()
    rect.centery = rect.centery % window.get_height()

    window.fill(0)
    pygame.draw.rect(window, (255, 0, 0), rect)
    pygame.display.flip()

pygame.quit()
exit()

原文由 Rabbid76 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题