Question

J'ai un conseil d'administration comme une toile avec plusieurs formes dessinées sur elle, certains d'entre eux sont des triangles, des cercles, des rectangles, mais tous sont contenus dans leur propre rectangle délimité limite.

"Le cercle sera à l'intérieur d'un rectangle"

Je mets deux cercles A, B de la carte où A est au-dessus de B et a une certaine zone de collision. Si je clique sur une zone correspondant à la zone de conteneur, mais pas la zone de forme Un cercle réelle, je ne vais pas sélectionner le un cercle, mais cela me empêche de sélectionner B depuis mes Un chevauchement de conteneurs et est sur B un.

Dans un cadre de base de l'événement, l'événement de l'enfant ira au parent non frères et sœurs, je suppose.

Donc, mon choix était de faire un chèque pour tout récipient de forme qui ont une surface au point x ordonnée par l'indice z. Ensuite, pour chaque conteneur vérifier si la forme à l'intérieur entrent en collision.

Il ne semble pas super efficace, mais est-il d'autres moyens?

---------
|    --------  
|    |      |
-----|      |
     --------
Était-ce utile?

La solution

Vous manipuler à peu près aussi bien qu'il peut être manipulé - systèmes de fenêtrage obéissent généralement ordre Z (couches)

.

Ce sera mieux à long terme de toute façon, surtout si vous voulez être en mesure de sélectionner plusieurs éléments en dessinant une zone de sélection autour d'eux.

Il existe des algorithmes pour trouver si les rectangles se chevauchent en les convertissant en des représentations 2D sur les deux axes x et y. Vous pouvez faire la même chose, puis comparer votre point pour voir quels objets votre point chevauche:

algorithme pour détecter l'intersection de deux rectangles?

Il suffit de traiter votre sélection de points (ou rectangle de sélection si vous dessinez un cadre de sélection pour sélectionner plusieurs éléments) comme un autre rectangle à comparer comme chevauchement aux autres.

-Adam

Autres conseils

Il y a des trucs que vous pouvez jouer si vous avez vraiment besoin de vitesse. Par exemple:

  • Si vous travaillez avec une palette profonde, vous pouvez utiliser les bits de poids faible de la couleur pour marquer les objets. Ensuite, jeter un oeil au pixel vous donne l'objet ou au moins de peur que vous rapidement cull de façon drastique la liste.
  • Même à faible profondeur de bit, si les objets sont monochromes, vous pouvez utiliser toute la couleur
  • Si vous êtes dans la résolution assez faible, vous pouvez garder un tableau qui indique quel objet possède ce pixel.
  • A res plus, vous pouvez faire la même chose, mais utiliser RLE pour maintenir la taille vers le bas (aussi regarder dans les arbres quad)
  • Et ainsi de suite ...

Si c'est juste la mise en œuvre simple, vous êtes après, un tour rapide est d'enregistrer le X & Y, repeindre l'écran et notez quel objet peint ce pixel.

- MarkusQ

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top