如何在pygame中使玩家不断运动?

时间:2018-11-09 12:52:39

标签: python-3.x pygame

我一直在观看youtube上有关玩家移动的pygame教程,并且通过使用以下代码,制作视频的人能够按住键,并且角色会一直移动,但是当我按住键时角色将移动一次,然后停止。有关如何解决此问题的任何想法?

代码:

import pygame

pygame.init()
win = pygame.display.set_mode((500, 500))

pygame.display.set_caption("huge honkabonkaros")

x = 50
y = 440
width = 40
height = 60
vel = 5

   run = True
   while run:
    pygame.time.delay(50)

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

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        x -= vel
    if keys[pygame.K_RIGHT]:
        x += vel
    if keys[pygame.K_UP]:
        y -= vel
    if keys[pygame.K_DOWN]:
        y += vel

    win.fill((0, 0, 0))
    pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
    pygame.display.update()
    pygame.quit()

// Alfons

1 个答案:

答案 0 :(得分:0)

这是Indentation的问题。连续移动必须在应用程序循环中,而不是在事件循环中。应用程序循环每帧运行一次,但事件循环每个事件只运行一次。按下键时会发生 KEYDOWN 事件,释放键时会发生 KEYUP 事件,但按住键时不会发生任何事件:

import pygame

pygame.init()
win = pygame.display.set_mode((500, 500))

pygame.display.set_caption("huge honkabonkaros")

x = 50
y = 440
width = 40
height = 60
vel = 5

    run = True
    while run:
    pygame.time.delay(50)

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

    # INDENTATION

    #<--|

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]:
        x -= vel
    if keys[pygame.K_RIGHT]:
        x += vel
    if keys[pygame.K_UP]:
        y -= vel
    if keys[pygame.K_DOWN]:
        y += vel

    win.fill((0, 0, 0))
    pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
    pygame.display.update()
    pygame.quit()