2017-04-08 2 views
0

Je suis en train de faire bouger un point autour d'un écran, mais il semble s'arrêter (arrêter de bouger) un peu quand je change de direction.est-il un moyen de rendre le mouvement plus lisse dans la toile Python Tk?

Y a-t-il une meilleure façon de rendre le mouvement plus fluide, ou simplement d'arrêter le retard dans les changements de direction?

Voici ce que j'utilise pour le déplacer:

def keypress(event): 
    key = (event.keysym) 

    if key == "w": 
     canvas.move(player,0,-20) 

    if key == "a": 
     canvas.move(player,-20,0) 

    if key == "s": 
     canvas.move(player,0,20) 

    if key == "d": 
     canvas.move(player,20,0) 

canvas.bind_all("<Key>", keypress) 
+0

Avez-vous essayé de le déplacer simplement par petits incréments? Vous sautez 20 pixels chaque fois que vous vous déplacez. –

Répondre

0

constantes Naming rend plus facile de les changer et d'expérimenter, en particulier lorsque l'on utilise la même constante dans plusieurs endroits dans le code. Dans le code ci-dessous, vous avez juste besoin de changer une copie de 20 pour expérimenter, comme l'a suggéré Bryan.

distance = 20 
movements = { 
    'w': (0, -distance), 
    'a': (-distance, 0), 
    's': (0, distance), 
    'd': (distance, 0), 
    } 

def keypress(event): 
    key = (event.keysym).lower() 
    canvas.move(player, *movements[key]) 

Tout en écrivant cela, je pris l'occasion de montrer comment utiliser un dict pour remplacer plusieurs conditionals par affacturage le code commun à partir du code de changement. La syntaxe * dans l'appel de mouvement sépare le tuple en deux arguments.