在允许输入的情况下无限期移动 Python 乌龟
Indefinitely move Python turtle while allowing input
我刚刚开始使用 Turtle 开发 Snake 版本,但遇到了一个问题。我想让蛇无限移动,也让用户用键盘移动蛇。我让蛇从用户输入移动,但我不知道如何让蛇在没有输入的情况下继续沿同一方向移动,同时防止它忽略用户输入:
while True:
win.onkey(up,"Up")
win.onkey(right,"Right")
win.onkey(down,"Down")
win.onkey(left,"Left")
win.listen()
#moves the snake one unit in the same direction it is currently facing
movesnake()
我是 Turtle 的新手,这是我对如何解决这个问题的猜测 - 这显然行不通。任何帮助,将不胜感激。我意识到 Pygame 可能会使这更容易,但由于我已经开始使用 Turtle,如果可能的话,我更愿意获得 Turtle 解决方案。
像 turtle 这样的事件驱动环境永远不应该有 while True:
,因为它可能会阻止事件(例如键盘)。请改用 ontimer()
事件。
通常,onkey()
和 listen()
不属于循环 -- 对于大多数程序,它们只需要被调用一次。
这是一个自主乌龟被用户输入重定向的骨架示例:
from turtle import Screen, Turtle
def right():
snake.setheading(0)
def up():
snake.setheading(90)
def left():
snake.setheading(180)
def down():
snake.setheading(270)
def movesnake():
snake.forward(1)
screen.ontimer(movesnake, 100)
snake = Turtle("turtle")
screen = Screen()
screen.onkey(right, "Right")
screen.onkey(up, "Up")
screen.onkey(left, "Left")
screen.onkey(down, "Down")
screen.listen()
movesnake()
screen.mainloop()
我刚刚开始使用 Turtle 开发 Snake 版本,但遇到了一个问题。我想让蛇无限移动,也让用户用键盘移动蛇。我让蛇从用户输入移动,但我不知道如何让蛇在没有输入的情况下继续沿同一方向移动,同时防止它忽略用户输入:
while True:
win.onkey(up,"Up")
win.onkey(right,"Right")
win.onkey(down,"Down")
win.onkey(left,"Left")
win.listen()
#moves the snake one unit in the same direction it is currently facing
movesnake()
我是 Turtle 的新手,这是我对如何解决这个问题的猜测 - 这显然行不通。任何帮助,将不胜感激。我意识到 Pygame 可能会使这更容易,但由于我已经开始使用 Turtle,如果可能的话,我更愿意获得 Turtle 解决方案。
像 turtle 这样的事件驱动环境永远不应该有 while True:
,因为它可能会阻止事件(例如键盘)。请改用 ontimer()
事件。
通常,onkey()
和 listen()
不属于循环 -- 对于大多数程序,它们只需要被调用一次。
这是一个自主乌龟被用户输入重定向的骨架示例:
from turtle import Screen, Turtle
def right():
snake.setheading(0)
def up():
snake.setheading(90)
def left():
snake.setheading(180)
def down():
snake.setheading(270)
def movesnake():
snake.forward(1)
screen.ontimer(movesnake, 100)
snake = Turtle("turtle")
screen = Screen()
screen.onkey(right, "Right")
screen.onkey(up, "Up")
screen.onkey(left, "Left")
screen.onkey(down, "Down")
screen.listen()
movesnake()
screen.mainloop()