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 !

Répondre à