如果未在pygame中按下箭头键,则继续循环

时间:2011-06-15 20:11:25

标签: python pygame

我正在尝试创建此功能,以便如果按下除任何箭头键之外的任何键,则循环继续,直到按下箭头键。程序每次都崩溃,不显示错误。知道为什么吗?

def speed(self, key):
    # Figure out if it was an arrow key. If so
    # adjust speed

    n = 'go'
    while n == 'go':
        if key == pygame.K_LEFT:
            x_speed=-5
            y_speed=0
            return x_speed, y_speed
            n = 'stop'
        if key == pygame.K_RIGHT:
            x_speed = 5
            y_speed = 0
            return x_speed, y_speed
            n = 'stop'
        if key == pygame.K_UP:
            y_speed = -5
            x_speed = 0
            return x_speed, y_speed
            n = 'stop'
        if key == pygame.K_DOWN:
            y_speed = 5
            x_speed = 0
            return x_speed, y_speed
            n = 'stop'
        else:
            continue

2 个答案:

答案 0 :(得分:5)

我从未在生活中使用过pygame,也没有写过一篇关于python的单词,但这是我的猜测:

def speed(self, key):
    # Figure out if it was an arrow key. If so
    # adjust speed
    if key == pygame.K_LEFT:
        x_speed=-5
        y_speed=0
        return x_speed, y_speed

    if key == pygame.K_RIGHT:
        x_speed = 5
        y_speed = 0
        return x_speed, y_speed

    if key == pygame.K_UP:
        y_speed = -5
        x_speed = 0
        return x_speed, y_speed

    if key == pygame.K_DOWN:
        y_speed = 5
        x_speed = 0
        return x_speed, y_speed

你的代码不起作用的原因是因为当没有按下箭头键时你实际上是这样做的:

n = "go"
while n == "go":
    continue

为语法错误道歉,如果我错了,也可以。

答案 1 :(得分:2)

遵守以下标准:

  • 循环只会在key为箭头时结束,因为当return是箭头键时,只会发生n = 'stop'个语句和key语句。< / p>

  • key的值永远不会在循环内部发生变化,因为key的唯一声明在speed()的定义

我们确定:如果我们使用非箭头key调用speed(),则循环将永远不会完成。当你在一个程序的主执行线程中遇到一个无限循环时,它习惯于冻结所有东西并吃掉美味的CPU周期。

解决方案是异步实现您的逻辑。如果你按一个键,它应该观察系统的状态,改变它触发动作所需的一切,然后快速返回,以免减慢程序的速度。一个永无止境的while循环在你的密钥检测逻辑中间并不是最接近最优的。