Aurelien Mazurie:
> 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.

(un des interets du masque binaire est en plus de pouvoir calculer tres facilement les collisions - pour les jeux)

Dans tous les cas, tu dois maintenir une liste triee (en general elle est dispo car utilisee pour l'affichage).

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.

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.



Répondre à