蟒蛇;我怎样才能使某物连续移动

时间:2018-09-08 20:25:51

标签: python pygame

这是我的代码:

import pygame
pygame.init()

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

pygame.display.set_caption("Test")
x = 50
y = 50
width = 40
height = 60
vel =5

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

    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,255,255), (x,y,width,height))
        pygame.display.update()

pygame.quit()

我希望当您按住其中一个按钮时矩形会连续移动,但是每次按下时矩形只会移动一次。 我刚刚开始学习Python和Pygame(如您所见),因此我很感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这里发生的事情是,您放置了代码以更新事件循环中的位置,这意味着仅当pyame检测到按键之类的事件时,才运行移动对象的代码。但是,如果按住某个键,pygame不会将其注册为事件。

只需将for循环中从keys = pygame.key...display.update()的所有代码删除,并将其放入while循环中即可。

因此:

while run:
    pygame.time.delay(100)

    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,255,255), (x,y,width,height))
    pygame.display.update()

pygame.quit()

只要按住键,需要移动的对象现在将连续移动!