python Ursina 中的冲刺功能出现问题

Problem with making a sprinting function in python Ursina

我正在制作 Mineclone,但卡在了冲刺阶段。

我想要的代码可以在您按下 Ctrl 键时将播放器置于 'sprinting' 模式,只要您按下了 w,并在松开 w 时退出冲刺。冲刺时释放 Ctrl 应该什么都不做。我在许多其他代码中尝试过这段代码,但是当我测试它时,它冻结了。

def update():
    global block_pick

    if held_keys['control'] and held_keys['w']:
        while held_keys['w']:
            player.speed = 10

所以代码会检查每一帧。

我不是很熟悉 Python 的游戏,但如果这是 vanilla Python 并且没有使用一些必须以不同方式编写的额外库;

首先,您的代码需要在更新功能下缩进。 其次,代码每帧都在更新,这意味着整个执行每帧速率为 re-run。所以while循环会阻止frame再次更新。

我建议您为冲刺引入一个全局布尔值,它会根据按下的按钮而变化。

sprint = False # global boolean

def update():
    global block_pick
    global sprint

    if held_keys['control'] and held_keys['w']:
        sprint = True
        player.speed = 10

    if sprint and not held_keys['w']: # check for button pressed while sprinting.
        sprint = False
        player.speed = 1