这个广场不动是有原因的吗?

时间:2019-03-29 14:58:30

标签: python pygame

我对python特别是PyGame还是很陌生,我不知道这是怎么回事。我的程序将启动,不会崩溃,但是根据我的按键,红色方块不会移动

我将相同的控制系统用于我做过的其他事情,但是效果很好,为什么现在不行呢?

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()

1 个答案:

答案 0 :(得分:2)

主循环中有2个事件循环。第一个循环获取所有消息并将其从队列中删除。第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'

        # [...]