2008-09-24 5 views
-1

J'ai dessiné une image dans le contexte du périphérique en utilisant python et je veux le déplacer doucement/animer soit verticalement ou horizontalement.Comment puis-je déplacer un objet dessiné dans un contexte de périphérique python

Quel algorithme dois-je utiliser? Où puis-je obtenir des informations pour ce type de tâches en python?

+0

Est-ce un doublon de http://stackoverflow.com/questions/126761/how-can-i-move-an-object-drawn-in-device-context-python? Pourriez-vous fermer l'un ou l'autre? –

+0

Vous devez indiquer quelle bibliothèque graphique vous utilisez. – wnoise

Répondre

1

Une fois qu'un objet est dessiné dans un contexte de périphérique, il y reste. Si vous voulez le déplacer, vous devez le redessiner.

Vous pouvez conserver un arrière-plan fixe et ne redessiner que les éléments mobiles chaque fois qu'ils se déplacent. Fondamentalement, c'est comme ça que ça se passe.

Pour déplacer un objet en douceur sur une ligne que vous devez faire quelque chose comme ça (je n'ai pas un programme prêt, ne peut donc vous donner une idée):

  • choisir le début et la position fin : point A (x1, y1) et B (x2, y2)
  • choisir combien de temps l'objet doit changer de position de A à B (disons 10 secondes).
  • utiliser un temporisateur défini sur un certain intervalle (disons 2 secondes)
  • calculer les delta X et Y que l'objet doit changer pour chaque intervalle de temporisateur. Dans ce cas dx = (x2-x1) * 2/10 et dy = (y2-y1) * 2/10
  • dans le rappel de la minuterie incrémenter la position courante de l'objet avec dx et dy et redessiner l'image

Ce serait l'algorithme.

Je suggère que vous jetez aussi un oeil à PyGame. Peut-être que vous pouvez l'utiliser et il a aussi quelques tutoriels.

+0

Exactement! J'ai besoin de l'information sur la façon de changer les valeurs calculées de coordonnées en douceur au fil du temps .... – gath

0

Pour se déplacer en douceur objet entre départ et coordonnées (x1, y1) destination de coordonnées (x2,y2), vous devez d'abord vous demander, comment à long l'objet doit prendre pour se rendre à sa destination. Disons que vous voulez que l'objet arrive en t unités de temps (qui peut-être secondes, heures, peu importe). Une fois que vous avez déterminé cela, il est alors trivial à l'entraînement le déplacement par unité de temps:

dx = (x2-x1)/t 
dy = (y2-y1)/t 

Maintenant, il vous suffit d'ajouter (dx,dy) à la position de l'objet ((x,y), d'abord (x1,y1)) chaque unité de temps, et arrêter lorsque l'objet se trouve à une certaine distance de seuil de la destination. Ceci pour tenir compte des erreurs de fait dans les divisions accumuleront, donc si vous avez fait une vérification de l'égalité comme:

(x,y)==(x2,y2) 

Il est peu probable qu'il ne sera jamais vrai.

Notez que la méthode ci-dessus vous donne une vitesse constante, un mouvement en ligne droite. Vous pouvez utiliser une sorte de formule légèrement plus complexe pour donner à l'objet l'apparence d'accélérer, de maintenir la vitesse de croisière, puis de décélérer. Les formules suivantes peuvent alors être utiles:

v(t) = u(t) + t*a(t) 
x(t) = v(t) + t*v(t) 

C'est simplement Euler's method, et devrait suffire à des fins d'animation.