如何使用单个按键在一个方向上移动对象,直到方向发生变化?

时间:2016-01-07 22:30:33

标签: python python-3.x pygame

当我启动程序并按第一个键时,程序会冻结。任何人都可以告诉我为什么这不起作用,并给我一个可能的解决方案我的问题?

if event.key == pygame.K_UP:
    key = False
    while key == False:
        schlange.move(0, -50)
if event.key == pygame.K_DOWN:
    key = True
    while key == True:
        schlange.move(0, 50)
if event.key == pygame.K_LEFT:
    key = False
    while key == False:
        schlange.move(-50, 0)
if event.key == pygame.K_RIGHT:
    key = True
    while key == True:
        schlange.move(50, 0)
def move(self, x_change, y_change):
    self.screen.fill(BLACK)
    self.x_change = x_change
    self.y_change = y_change
    self.startx += x_change
    self.starty += y_change
    self.rectsize = (self.startx, self.starty)
    pygame.draw.rect(self.screen, self.color, [self.startx, self.starty, self.width, self.height])

提前致谢!

2 个答案:

答案 0 :(得分:1)

代码中的格式设置已关闭 - 但无论如何 - 每个部分中的代码如下所示:

key = False
while key == False:
    schlange.move(0, -50)

永远不会完成。 while循环将始终评估为True,因为key == False始终为true,并且永远不会更改。所以循环永远不会结束。

答案 1 :(得分:0)

它可能是这样的

speed = (0, 0)

While True:

    # --- events ---

    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                speed = (0, -50)
            elif event.key == pygame.K_DOWN:
                speed = (0, 50)
            if event.key == pygame.K_LEFT:
                speed = (-50, 0)
            if event.key == pygame.K_RIGHT:
                speed = (50, 0)

    # --- all updates (without draws) ---

    schlange.move(speed[0], speed[1])

    # --- all draws (without updates) ---

    # ...