带有keydown的{Pygame无限循环

时间:2017-11-02 15:08:01

标签: python pygame

编辑没有。 2

我在函数中做了第二个事件循环来检查是否存在KEYUP事件,现在它可以正常工作。谢谢所有评论的人!

修改

所以我将显示部分与移动的东西分开,并意识到它实际上没有从键盘上取任何新的输入,所以它不知道pg.K_s不再被按下了,但现在我不知道如何从我的函数中获取key_up事件。我应该再次使用event.get吗?

我正在尝试在Pygame中制作游戏,您可以使用WASD来控制角色。我希望所有内容都包含在不同的类和函数中,所以我将角色移出主循环并进入函数。不幸的是,现在每当我按下任何WASD键时,精灵就会无限地向那个方向移动并产生运行时错误。

def moving(self):
        counter = 0
        loop = pg.key.get_pressed()
        for i in range(0, len(loop)):
            if loop[i] == 1:
                counter += 1
            else:
                continue
        while counter == 1:
            pressed = pg.key.get_pressed()
            if pressed[pg.K_w]:
                if (self.y - 3) >= 0:
                    self.y -= 3
            elif pressed[pg.K_a]:
                if (self.x - 3) >= 0:
                    self.x -= 3
            elif pressed[pg.K_s]:
                if (self.y + 3) <= 238:
                    self.y += 3
            elif pressed[pg.K_d]:
                if (self.x + 3) <= 360:
                    self.x += 3
            self.display.fill((0, 0, 0))  
            self.display.blit(self.justin, (self.x, self.y))
            pg.display.flip()
            clock = pg.time.Clock()
            clock.tick(100)
            counter = 0
            loop = pg.key.get_pressed()
            for i in range(0, len(loop)):
                if loop[i] == 1:
                    counter += 1
                else:
                    continue

以下是调用移动函数的代码:

while True:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    pg.display.quit()
                    pg.quit()
                elif event.type == pg.KEYDOWN:
                    if (event.key == pg.K_w or event.key == pg.K_a
                        or event.key == pg.K_s or event.key == pg.K_d):
                        self.moving()

老实说,我不知道从哪里开始 - 只要一个按钮停止按下,计数器应该保持为0,因此while循环将关闭,但它只是无限地将精灵发送到边缘屏幕。

1 个答案:

答案 0 :(得分:1)

假设您试图在按住鼠标按钮的同时使角色连续移动(如果要使其逐步移动,则只需单独检查按键并在x&y上加/减),最好是放弃计数器,而是在事件循环之外放置以下内容:

keys=pg.key.get_pressed()
if keys[pg.K_w]:
    if x >= 0: x -= 3
if keys[pg.K_s]:
    if x <= 360: x += 3
if keys[pg.K_a]:
    if y >= 0: y -= 3
if keys[pg.K_d]:
    if y <= 238: y += 3