Forums Développement Multimédia

Aller au contenu

bitampData et clic de la souris

CODE

3 réponses à ce sujet

#1 lazrie

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 242 messages

Posté 10 May 2011 - 15:25 PM

Bonjour :D,

Y'aurait t'il un tutoriel ou un article sur la meilleur façon d'aborder la détection du clic de la souris sur des éléments de type BitmapData présent en grand nombre, en tenant compte qu'ils peuvent se chevaucher?

Bonne journée,

#2 nicoptere

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3946 messages

Posté 10 May 2011 - 16:06 PM

salut,
pour la question: pas à ma connaissance du fait que les bitmapData ne sont pas des objets graphiques mais des plages mémoires. les plages mémoires se chevauchent rarement :) (heureusement d'ailleurs ^^)
cela étant il existe des méthodes hitTest() sur bitmapData qui permettent de tester si le BitmapData est en collision avec différents objets (Point, Bitmap, BitmapData ou Rectangle ).
une autre méthode importante c'est getColorBoundsRect(): sur un BitmapData transparent, ça te retourne un rectangle de la zone occupée par les pixels non transparents.

dans ton cas, je crois que la question porte plus sur les Bitmaps, c'est différent : ce sont des DisplayObjects.

pour une broad phase (un détection vite fait) le BitmapData embeddé dans un Bitmap récupère les attributs de Bitmap donc un hitTestPoint et hitTestObject (#). tu as aussi accès à getRect() et getBounds() qui te renvoient des rectangles. ensuite rectangle expose un méthode contains().

en gros il y a plein d'outils pour vérifier si 2 rectangles se touchent ^^
après ça se complique si tu veux tester les collisions sur des rectangles qui ont subi une rotation, une méthode répandue s'appelle le AABB ( axis aligned bounding box ).

#3 lazrie

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 242 messages

Posté 10 May 2011 - 17:12 PM

En faite, l'idée que je voudrais testé c'est d'avoir un Bitmapdata dans un Bitmap qui me servirai d'"écran". Et ensuite, je copie l'élément BitmapData de l'objet a afficher dedans ; les tests sont fait avec un hitest fait entre la souris et Le bitmapData de l'objet dont j'ai mémorisé la position.

Ou j'ai du mal a voir.c'est lorsque les éléments se chevauche. Les testes se faisant en boucle, il y a un risque que le Bitmapdata le plus en arrière soit validé au clic de la souris alors que c'était celui de devant que je voulais avoir.

J'ai réglé ça avec un système de profondeur(le plus en avant remplce le plus en arrière en cas de test positif). Mais je me demande si y'a pas plu simple comme réduire la zone de test autour de la souris ^^. C'est pour ça, je me demande comment son géré les bouclage de testes des objtes dans se type de problème.

Le soucis, c'est ce que ça va pas virer a la machine a gaz inutilement ^^.

#4 St4n

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 98 messages

Posté 12 May 2011 - 11:02 AM

Bonjour,

Plus optimisé que le hitTest, tu peux faire un getPixel sur tes bitmap par ordre de profondeur. (du plus en avant au plus en arrière).

Dès que tu détectes une couleur, tu connais le bitmap touché et le plus en avant.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)