Персонаж не ходит плавно при зажатии

Всем привет! Те, которые используют turtle знают, что персонаж не движется плавно при зажатии. А это мешает геймлею. Как это исправить?

import turtle as tr

pl = tr.Turtle()
pl.pu()

wn = tr.Screen()

def d():
    pl.goto(pl.xcor(),pl.ycor()-10)

wn.listen()
wn.onkeypress(d,"Down")
wn.mainloop()

Ответы (1 шт):

Автор решения: Сергей Кох

Надо чтоб передвижение не зависило от редких импульсов от зажатой клавиши клавиатуры. Поэтому pl.goto запихиваем в цикл while.

import turtle as tr

flag = 1

pl = tr.Turtle()
pl.pu()

wn = tr.Screen()

def d():
    global flag
    flag = 1
    while flag:
        pl.goto(pl.xcor(),pl.ycor()-3)

def stop_d():
    global flag
    flag = 0

wn.listen()
wn.onkeypress(d,"Down")
wn.onkeyrelease(stop_d, "Down")
wn.mainloop()

Так правда все остальное зависнет до отпускания клавиши, тогда используем ontimer:

import turtle as tr

flag = 1

pl = tr.Turtle()
pl.pu()

wn = tr.Screen()

def d():
    global flag
    if flag:
        pl.goto(pl.xcor(),pl.ycor()-3)
        wn.ontimer(d, 1)
    else:
        flag = 1

def stop_d():
    global flag
    flag = 0

wn.listen()
wn.onkeypress(d,"Down")
wn.onkeyrelease(stop_d, "Down")
wn.mainloop()
→ Ссылка