je dessinai dans l'�cran virtuel un rectangle au m�me
endroit, avec une couleur unique: par exemple la couleur 1 si c'�tait
l'objet n�1). Ensuite, � chaque clic de souris il me suffisait de
lire la couleur du pixel aux coordonn�es correspondantes dans l'�cran
virtuel, et je connaissait l'ID de l'objet � modifier en cons�quence.
Mais ca marchera aussi en Java ;-) Soit dit cette solution n'est pas
optimale en terme de perfs (ca depend du nombre d'objets a l'ecran et
de leur deplacement) et la precision est imposee: le pixel. S'il y a
vraiment (vraiment) beaucoup d'objets et qu'ils sont statiques, c'est
la bonne solution.
Sinon, il vaut mieux que chaque objet ait deux methodes:
boxContains(x,y)
contains(x,y).
La premiere indique si le clic est dans la boite englobante (c'est une
optimisation tres importante). La seconde s'il est vraiment dans
l'objet. Si ton objet est un lutin (sprite), tu peux utiliser un
masque binaire ou un polygone approchant. Si c'est un objet
geometrique, tu calcules directement.
Par chance les objets que je manipule sont strictement rectangulaires.
(un des interets du masque binaire est en plus de pouvoir calculer
tres facilement les collisions - pour les jeux)
Comment utiliser un masque binaire ? Est-il faisable de passer par la
m�thode que j'utilisait (�cran virtuel o� je lisais la couleur du pixel
� l'endroit voulu) ?
Dans tous les cas, tu dois maintenir une liste triee (en general elle
est dispo car utilisee pour l'affichage).
Oui, ca ne devrais pas poser de probl�me
Concernant l'optimisation par tuile, il s'agit de disposer ton ecran
et de maintenir une liste triee par zone (tuile). S'il y a beaucoup
d'objets, l'optimisation est efficace.
Ahhh ! Je vois. Mais comment g�rer les objets qui sont aux
intersections de deux tuiles ? =) En tout cas il est vrai que l'on peut
limiter les tests aux objets strictement visibles � l'�cran (ma zone de
dessin est scrollable avec un JScrollPane, donc tout n'est pas visible
en m�me temps)
Guillaume
PS: pour les OS, c'est un parcours de liste. En fait, c'est un
parcours decendant de l'arbre. Pour les fenetres de forme non
rectangulaire, il y a en plus un masque binaire.
Merci beaucoup !