2016-06-03 2 views
0

Я пытался сделать turtle.speed(0), и я пробовал turtle.goto(turtle.xcor(), turtle.ycor()) ничего не работает.Как заставить пехоту черепа перемещаться?

Это код:

import turtle 

def stopMovingTurtle(): 
    ## Here I Need To Stop The Turtle ## 

turtle.listen() 
turtle.onkey(stopMovingTurtle, 'Return') 
turtle.goto(-200, 0) 
turtle.goto(200, 0) 

Так как же я остановить его?

+0

'onkey' просто связывает функцию с ключом, поэтому вам нужно« слушать »после этого для ключей. switch 'onkey' и' listen' –

+0

Хорошо, но это не помогает моему вопросу. –

+1

Вы пробовали? Я дал идею переключения порядка 'turtle.listen()' и 'turtle.onkey()', потому что 'turtle.onkey' не« делает »ничего, кроме привязки функции к ключу, но' listen' делает. –

ответ

1

Проблема здесь не в порядке turtle.listen() против turtle.onkey(), это означает, что событие ключа не обрабатывается до завершения текущей операции. Вы можете улучшить это, сегментировав свое длинное движение turtle.goto(-200, 0) на более мелкие движения, каждый из которых дает шанс вашему ключевому событию действовать. Вот грубый пример:

import turtle 

in_motion = False 

def stopMovingTurtle(): 
    global in_motion 
    in_motion = False 

def go_segmented(t, x, y): 
    global in_motion 
    in_motion = True 

    cx, cy = t.position() 

    sx = (x > cx) - (x < cx) 
    sy = (y > cy) - (y < cy) 

    while (cx != x or cy != y) and in_motion: 
     if cx != x: 
      cx += sx 
     if cy != y: 
      cy += sy 

     t.goto(cx, cy) 

turtle.speed('slowest') 
turtle.listen() 
turtle.onkey(stopMovingTurtle, 'Return') 

go_segmented(turtle, -200, 0) 
go_segmented(turtle, 200, 0) 

turtle.done() 

Если (переход к окну и) хит возвращение, черепаха будет прекратить рисовать текущую строку.

Смежные вопросы