Forums Développement Multimédia

Aller au contenu

hitTest sur un sous clip

CODE Actionscript

7 réponses à ce sujet

#1 Zigouigoui1327250096

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 102 messages

Posté 19 August 2005 - 21:55 PM

Bonjour,

Voilà j'ai un petit soucis...
J'essaye de faire un hitTest sur un sous clip, mais apparemment rien ne veut marcher...

J'ai fait une petite anime épuré histoire de simplifié les explications wink.gif

alors pour expliquer j'ai un clip sur la scène que j'ai appelé "clipCible" tout bêtement...
il y a un autre clip qui s'appel "rond" qui lui est en startDrag();
et enfin, il y a un autre clip à l'intérieur du clip "rond", celui là s'appel "rond2" (beaucoup de recherche dans les noms n'est-ce pas)
j'ai essayé de faire un hitTest entre le clip "clipCible" et le clip "rond2", mais ça ne marche pas.
J'ai essayé de le faire entre le clip "clipCible" et "rond", là ça marche, donc mon code est bon wink.gif

voilà mon code sur la scène :

Code
startDrag(rond, true);
if(clipCible.hitTest(rond.rond2._x, rond.rond2._y, true)){
trace("Touchééééé");
}


donc un code assez simple

Vous avez une idée ?

Merci d'avance smile.gif

Fichier(s) joint(s)



#2 didouche

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4461 messages

Posté 19 August 2005 - 22:26 PM

Un hitTest avec coordonnées utilise les coordonnées du clip sur la scène. Or les coordonnées de rond2 sont données relativement à son clip conteneur , donc elles ne varient pas car rond2 ne bouge pas dans rond.

Un
Code

trace(rond.rond2._x);

te permet de le verifier.

Il faut convertir les coordonnées en coordonnées sur la scène. Soit tu fais toi-même un calcul prenant en compte les coordonnées de rond sur la scène et celles de rond2 dans rond. Mais c'est chiant car si tu déplace rond2 dans rond, il te faut refaire le calcul.

Soit tu utilise localToGlobal pour convertir les coordonnées dans rond en coordonnées dans la scène.

Il te faut un objet intermédiaire auquel tu passes comme propriétés les coordonnées de rond2. Ensuite tu le passe comme paramètre dans localToGlobal appliqué au clip rond car ce sont les coordonnées dans rond que tu veux transformer en coordonnées dans la scène. Et tu testes avec les nouvelles propriétés de ton objet.

Code

startDrag(rond, true);
objetIntermediaire=new Object();
onEnterFrame=function(){
objetIntermediaire.x=rond.rond2._x;
objetIntermediaire.y=rond.rond2._y;
rond.localToGlobal(objetIntermediaire);
if(clipCible.hitTest(objetIntermediaire.x,objetIntermediaire.y,true)){
trace("Touchééééé");
}
}


#3 Zigouigoui1327250096

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 102 messages

Posté 20 August 2005 - 09:27 AM

ah interessant je n'avais jamais utilisé localToGlobal, ou jamais eu besoin lol
mais malheureusement ça ne marche pas non plus sad.gif

merci pour ton aide smile.gif

#4 Zigouigoui1327250096

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 102 messages

Posté 20 August 2005 - 09:42 AM

Oups désolé, ça marche nickel...

Je viens de voir qu'il y avait un "t" en trop dans ton code : objetIntermediairet.y

Edit: je l'ai corrigé, merci.

Merci ça marche, et tu viens de m'apprendre quelque chose avec le localToGlobal

encore merci Didouche wink.gif

Modifié par Didouche, 21 August 2005 - 14:56 PM.


#5 Ged

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 127 messages

Posté 20 August 2005 - 10:30 AM

Salut,
Il m'a l'air bien compliqué ton code didouche icon_eek.gif
Moi j'ai essayé ceci et ça marche.

ActionScript
startDrag(rond, true);
if(_root.rond.rond2.hitTest(_root.clipCible)){
trace("Touchééééé");
}


'Faut pas chercher trop loin icon_mrgreen.gif

#6 Zigouigoui1327250096

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 102 messages

Posté 20 August 2005 - 10:37 AM

Oui Ged, ça marche ça aussi, c'est ce que j'avais fait au début

Mais le problème c'est qu'il n'y aucune précision dans ce hitTest, car il test sur l'emcombrement du clip et non pas sur ses formes, ce qui fait que ci ta forme est biscornue, le histTest ne prendra en compte qu'une forme rectangulaire, donc aucune précision...

Avec l'autre l'autre code, chaque courbes est prise en compte... smile.gif

merci quand même smile.gif

#7 didouche

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4461 messages

Posté 20 August 2005 - 11:56 AM

Ged (Aug 20 2005, 11:30 AM) a dit :
Salut,
Il m'a l'air bien compliqué ton code didouche  icon_eek.gif
Moi j'ai essayé ceci et ça marche.

Voir le message




Le hitTest sur deux clips ramène automatiquement les coordonnées des deux relativement à la scène. Ce qui fait que ça marche entre deux clips quelque soit le niveau des clips.

Le problème est que ca teste sur le rectangle englobant le clip ce qui n'est pas précis.

Comme expliqué plus haut, un test sur coordonnées de point est plus précis mais la conversion n'est pas effectuée automatiquement. D'ou localToGlobal().

Ged (Aug 20 2005, 11:30 AM) a dit :
'Faut pas chercher trop loin  icon_mrgreen.gif

Voir le message



Sans commentaire.

#8 Ged

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 127 messages

Posté 21 August 2005 - 14:23 PM

Ah ok j'avais pas vu sorry guys roi.gif



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

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