Turtle.onkeypress 让我困惑。为什么不起作用?

问题描述 投票:0回答:2

所以我已经运行了我的代码几次,不,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()
python python-3.x turtle-graphics python-turtle
2个回答
1
投票
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")

-1
投票

你为什么不试试这个呢?

 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()
© www.soinside.com 2019 - 2024. All rights reserved.