Vous êtes sur la page 1sur 2

DEUST AMRL Orsay avril 2007

Delphi séance N° 7
DESSINS ET ANIMATIONS

Objectif : simuler le déplacement et le dépassement de 2 voitures sur une route à 2 voies


sh2 sh1 Lignes dessinées dans FormCreate
(rouge imRoute
(jaune)

bnDepart bnMarcheArret spVx1 spVx2

Vous pouvez tester la démo LEMANS.EXE

Légendes : sh : Shape, sp : SpinEdit, im : Image


Le composant timer n'apparaît pas dans la copie d'écran.
Le fond de imRoute ne sera blanc que quand on fera quelque chose dedans (voir §2).

1 - Animation de la voiture rouge


Programmez la réaction au clic sur le bouton Départ :
 Mettre en route le timer.

Programmez le rôle du timer :


 Il suffit d'augmenter la valeur de la propriété Left de sh2. Pour l'instant, on peut fixer cette
augmentation.
Après avoir enregistré l'unité et le projet, testez ce début de programme. Si la voiture part
toute seule, c'est que le timer est en marche par défaut. Il faut l'inhiber dans l'inspecteur
d'objet.

2- Préparations
Programmez la réaction à la création de la fiche :
 Donner des valeurs initiales aux deux vitesses (variables Vx1 et Vx2)
 Tracer la route dans le Canvas de imRoute :
 deux lignes en traits pleins,
 une ligne en traits discontinus (imRoute.Pen.Style:=psDash)
 Placer les deux voitures sur la file de droite (celle du bas sur l'écran), la rouge à gauche de
la jaune
Dans la démo, la propriété Align de imRoute vaut alTop et elle fait 80 de haut. Les voitures
font 20 de haut. Le bord haut de la route est à 10, le bord bas à 70 et la ligne discontinue à 40.

1/2
3 - Animation de la voiture jaune
Dans la procédure qui définit le rôle du timer, il suffit d'augmenter aussi la valeur de la
propriété Left de sh1. La voiture jaune avancera vers la droite.
Si la voiture rouge va plus vite que la jaune, la rouge passe sur la jaune !

4 - Dépassement
Pour éviter les chocs, on peut faire changer la voiture rouge de file pour qu'elle dépasse la
jaune avant qu'il ne soit trop tard. On la remettra dans la file normale dès qu'elle aura dépassé
la jaune.
Pour cela il faut comparer la position de la voiture jaune après l'avoir déplacée avec la
position qu'aura la rouge quand on l'aura déplacée :
Si l'avant de la voiture rouge + sa vitesse est supérieur ou égal à l'arrière de la jaune
et si l'arrière de la rouge est inférieur ou égal à l'avant de la jaune :
on place la rouge dans la file de gauche
Sinon
on place la rouge dans la file de droite.

Propriété(s) d'un Shape rectangle bord pour nos voitures


Left gauche l'arrière
Left+Width-1 droit l'avant

5 - Marche/Arrêt
Pour éviter d'avoir trop de boutons, on peut donner à un même bouton les rôles Marche ou
Arrêt alternativement. Ceci empêchera de cliquer sur Marche alors qu'on est déjà en marche
ou inversement.

Au début ce bouton a comme Caption Arrêt et il est inhibé.


Il est rendu utilisable quand on clique sur Départ (pensez à ajouter ce rôle dans la réaction au
clic sur Départ).
Quand on clique dessus sur le bouton Marche/Arrêt :
 Si Caption vaut Arrêt :
 on remplace Arrêt par Marche et on inhibe le timer,
 Sinon
 on remplace Marche par Arrêt et on autorise le timer.

6 - Départ
Pour replacer les voitures comme au début, on peut ajouter à la réaction au clic sur le bouton
Départ :
 Placer les deux voitures sur la file de droite (celle du bas), la rouge à gauche de la jaune
(on peut recopier ce qui est déjà dans FormCreate),
 Mettre Arrêt comme Caption du bouton Marche/Arrêt,

7 - Réglages des vitesses


Pour que l'utilisateur puisse changer les deux vitesses, il faut programmer la réaction au
changement (événement OnChange) de chacun des 2 SpinEdit :
 La vitesse de la voiture correspondante (Vx1 ou Vx2) reçoit la propriété Value de spVx1
ou spVx2.

Il est plus facile de créer une procédure de réaction pour chaque SpinEdit.
On pourrait aussi changer la vitesse de l'animation en modifiant l'intervalle du timer.

2/2

Vous aimerez peut-être aussi