【问题标题】:Indefinitely move Python turtle while allowing input在允许输入的同时无限期移动 Python 乌龟
【发布时间】:2019-03-16 20:05:19
【问题描述】:

我刚刚开始使用 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 解决方案。

【问题讨论】:

    标签: python turtle-graphics


    【解决方案1】:

    像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()
    

    【讨论】:

    • 是的,非常感谢,效果很好:) 你知道的越多
    最近更新 更多