Turtle.onkeypress使我感到困惑。为什么不起作用?

时间:2019-01-10 13:15:13

标签: python python-3.x

所以我已经运行了好几次否,并且onkeypress方法似乎无法正常运行。

因此,每当我运行python脚本时,所有move方法都将执行一次并按应有的方式工作。 但是只要我按下指定的按钮之一(例如“ w”),它们就不会执行 我究竟做错了什么?而我该如何摆脱呢? 预先感谢

def move_up():
    y = snake.ycor()
    y += 20
    snake.sety(y)
    print("l")


def move_down():
    y = snake.ycor()
    y -= 20
   snake.sety(y)
   print("l")


def move_left():
    x = snake.xcor()
    x -= 20
    snake.setx(x)
    print("l")


def move_right():
    x = snake.xcor()
    x += 20
    snake.setx(x)
    print("l")

# snake
snake = turtle.Turtle()
snake.speed(0)
snake.shape("square")
snake.color("white")
snake.penup()
snake.goto(-290, 290)



# keyboard input
wn.listen()
wn.onkeypress(move_up(), "w")
wn.onkeypress(move_down(), "s")
wn.onkeypress(move_left(), "a")
wn.onkeypress(move_right(), "d")

# Main game loop
while True:
    wn.update()

1 个答案:

答案 0 :(得分:1)

wn.onkeypress(move_up(), "w")

此行等效于“立即调用move_up(),获取其返回值,并将其注册到'w'keypress事件”。同样,以下三行会立即调用move_down,move_left和move_right,而无需等待用户按下按钮。

您应该将函数作为参数传递而无需调用它们。跳过括号:

wn.onkeypress(move_up, "w")
wn.onkeypress(move_down, "s")
wn.onkeypress(move_left, "a")
wn.onkeypress(move_right, "d")