python - 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(如您所见),所以我很感谢您的帮助。
解决方案
这里发生的事情是,您将代码用于更新事件循环中的位置,这意味着您移动对象的代码仅在 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()
现在只要按住按键,需要移动的物体就会连续移动!
推荐阅读
- ios - 使用 CoreBluetooth CBL2CAPChannel
- excel - x = x + y 公式在 Excel VBA 中返回 0
- node.js - puppeteer headless chrome 是否可以在 Azure 应用服务的 Windows 容器中工作?
- go - 观察循环内的无效值
- php - 插入表格在 foreach Laravel 5.8 中不起作用
- ionic4 - 未捕获的错误:找不到模块“./scroll-view”
- python - 解析语法时发生移位减少冲突
- airflow - 气流 - 空白,不显示“最近的任务”和“DAG 运行”
- apache - 如何应用 chunk / modx 模板更改?
- react-native - 反应原生 TabView 滑动