首页 > 解决方案 > Python; 我怎样才能让某物不断移动

问题描述

这是我的代码:

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(如您所见),所以我很感谢您的帮助。

标签: pythonpygame

解决方案


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

keys = pygame.key...只需从 for 循环中删除所有代码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()

现在只要按住按键,需要移动的物体就会连续移动!


推荐阅读