Faut que tu revoies les structures de contrôle, aucun problème ne se résout en remplaçant un if par un while mal foutu :p
Tes modifications du sprite et de la position sont visibles après apparition des messages tout simplement parce que l'affichage se fait en fin de boucle principale, à moins d'être appelé explicitement. Quoi que tu mettes dans ton code, l'effet ne sera visible qu'à l'image suivante.
Remarque : ton while suspendait bien l'exécution de tout le programme, le temps de compter de 0 à 50, soit pas grand-chose... Pour figer le programme pendant une durée, il y a la fonction sleep. Pour faire attendre un seul objet, il y a les alarmes.
La solution pour toi est donc d'initier le déplacement du perso, d'attendre qu'il l'ait fait pendant quelques images, puis de reprendre les messages.