所以我已经运行了我的代码几次,不,onkeypress 方法似乎没有像预期的那样工作。
因此,每当我运行 python 脚本时,所有移动方法都会执行一次并按其应有的方式工作。 但每当我按下指定按钮之一(例如“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()
wn.onkeypress(move_up(), "w")
这一行相当于“立即调用 move_up(),获取其返回值,并将其注册到 'w' 按键事件”。同样,以下三行立即调用 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")
你为什么不试试这个呢?
def up():
head.setheading(90)
head.forward(10)
def down():
head.setheading(270)
head.forward(10)
def left():
head.setheading(180)
head.forward(10)
def right():
head.setheading(0)
head.forward(10)
wn.listen()
wn.onkeypress(up, "Up")
wn.onkeypress(down, "Down")
wn.onkeypress(left, "Left")
wn.onkeypress(right, "Right")
while True:
wn.update()
wn.mainloop()