gpt4 book ai didi

python - 这个方 block 不动有什么原因吗?

转载 作者:行者123 更新时间:2023-12-01 01:05:15 24 4
gpt4 key购买 nike

我对 python 尤其是 PyGame 很陌生,我不知道这里发生了什么。我的程序将启动并且不会崩溃,但红色方 block 不会根据我的按键而移动

我已经在我制作的其他东西中使用了相同的控制系统,并且它工作得很好,那么为什么它现在不起作用呢?

class Player:

def __init__(self, x, y):
self.x = x
self.y = y
self.speed = 10
self.dir = ''

def update(self):
if self.dir == 'up':
self.y -= self.speed
elif self.dir == 'down':
self.y += self.speed
if self.dir == 'right':
self.x += self.speed
if self.dir == 'left':
self.x -= self.speed

pygame.draw.rect(gameDisplay, red, (self.x, self.y, 50, 50))

run = True

while run:

for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()


for event in pygame.event.get():

if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
man.dir = 'up'
if event.key == pygame.K_s:
man.dir = 'down'
if event.key == pygame.K_d:
man.dir = 'right'
if event.key == pygame.K_a:
man.dir = 'left'

if event.type == pygame.KEYUP:
if event.key == pygame.K_w:
man.dir = ''
if event.key == pygame.K_s:
man.dir = ''
if event.key == pygame.K_a:
man.dir = ''
if event.key == pygame.K_d:
man.dir = ''

gameDisplay.fill(white)

man.update()

clock.tick(fps)
pygame.display.update()

最佳答案

主循环中有 2 个事件循环。第一个循环获取所有消息并将它们从队列中删除。第二个事件循环永远不会运行。
由于键盘事件将在第二个事件循环中处理,因此它们会被错过。
删除第二个事件循环并处理第一个事件循环中的所有事件以解决问题:

while run:

for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

# for event in pygame.event.get(): <---- delete this

if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
man.dir = 'up'
if event.key == pygame.K_s:
man.dir = 'down'
if event.key == pygame.K_d:
man.dir = 'right'
if event.key == pygame.K_a:
man.dir = 'left'

# [...]

关于python - 这个方 block 不动有什么原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com