Consignes permanentes :
Exercice
Les objets animés peuvent sortir de l'écran, il faut alors les détruire afin d'éviter de mobiliser le processeur
avec des calculs inutiles (mêmes invisibles les instances existent toujours en mémoire et leurs méthodes
"automatiques" sont actives).
Remarque - Il est possible d'envisager d'autres solutions que la destruction : l'objet peut « rebondir » sur les limites du canvas,
l'objet peut « réapparaître » ailleurs avec des propriétés différentes (couleur, taille, trajectoire...).
L'idée est la suivante : un attribut de type booléen souvent appelé drapeau (flag en anglais) renseigne sur un état de
l'instance (ici l'état de mouvement).
Toutes les méthodes ont accès à cet attribut booléen et prennent des décisions en fonction de sa valeur.
Par aillleurs, une fonction de contrôle examine la position de l'instance (teste la sortie du canvas), les interactions avec l'extérieur et modifie
le booléen.
Remarques :
- Les dimensions du canvas peuvent être déterminées grâce à :
nom_canvas.winfo_reqwidth()
et nom_canvas.winfo_reqheight()
.
- La méthode mvt() a été modifiée (abandon de move() au profit de coords()) car la nouvelle méthode controle() utilise les coordonnées
x1, y1, x2, y2 qui sont définies au départ mais modifiées par move() de façon "invisible" ; on modifie donc explicitement les attributs
x1, y1, x2, y2 puis on met les coordonnées à jour via coords() (on pourrait procéder autrement).
Perfectionnement : changement de couleur avant destruction de l'instance.
Modifier la méthode controle() de façon à ce qu'elle :
- modifie l'attribut cl (couleur)
- modifie la couleur de l'instance à l'aide de nom_canvas.itemconfig(nom_instance, fill=couleur)
- rafraichisse l'affichage à l'aide de nom_fenêtre.update_idletasks()
- ajoute un temps d'attente de 500 ms nom_fenêtre.after(500, None)
(aucune fonction lancée)
- détruise l'instance à l'aide de nom_canvas.delete(nom_instance)