Définir une zone réactive non-rectangulaire à partir de xmouse et ymouse > c'est

[Résolu]
Signaler
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021
-
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021
-
Salut,

Pour les besoins d'une animation spécifique, j'essaye de créer une zone réactive qui ne soit pas rectangulaire! Ce qui me pose problème, c'est que je ne peux absolument pas utiliser un bouton pour la créer (ça me pose un tas de problème d'interaction avec les boutons qui interviennent au dessus de la zone réactive).
J'ai donc pensé à utiliser xmouse et ymouse dans un onMouseMove et à placer plusieurs zones réactives de ce type à des tailles différentes les unes à côté des autres pour recréer ma forme mais ça ne convient pas car ma zone réactive possède un grand bord arrondi. A moins de créer de très fines zones réactives les unes en dessous des autres, ce qui risque d'être un peu tarabiscotté, je ne vois pas comment appliquer cette méthode, qui se défini sous ce code:

//crée un objet d'ecoute
ecoute = new Object();
//si la souris bouge
ecoute.onMouseMove = function() {
//on compare les coordonnés de la souris à la zone qu'on desire rendre "sensible"
if (_xmouse>limitXmini & _xmouse<limitXmaxi & _ymouse>limitYmini& _ymouse<limitYmaxi) {
//instruction

}
};
//attache l'ecoute a la souris
Mouse.addListener(ecoute);

N'y a t'il pas moyen d'y faire entrer les coordonnées d'une zone non-rectangulaire?

30 réponses

Messages postés
232
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
29 mars 2011

onMouseMove = function ()

{

if (zonereactive.hitTest (_xmouse, _ymouse, true))

clip_container.gotoAndStop (1);

}

^^
Messages postés
1575
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
21 février 2011
2
Salut

oui et non c pas tt a fait ca

hitTest permet de virifier si 2 clips se touchent ou si un clip "touche" une delimitation

si tu fait un clip zone active (transparent), tu peux savoir si la sourie est dessus (le touche) via

zoneSensible.hitTest(_xmouse, _ymouse);

si ce hitTest te renvois vrai (true) c'est que ta sourie est au bon endroit pour activer tes boutons

onMouseMove = function(){

if (zone.hitTest(_xmouse,_ymouse,true) and clipanimbouton._currentframe == 1){

clipanimbouton.play();

}

}

je test aussi si ton anim sur le bouton est lancé car si elle est lancer, il faut pas la relancé des que la sourie bouge

++

Flash sans Limites
_Benjy chez kOlapsis

merci de penser a accepter
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Pour faire un test, tu fais:



if (zonereactive.hitTest (_xmouse, _ymouse, true))



équivalent à:



if (zonereactive.hitTest (_xmouse, _ymouse, true)==true)



pour tester que c'est faux:



if (zonereactive.hitTest (_xmouse, _ymouse, true)==false)



ou



if (!zonereactive.hitTest (_xmouse, _ymouse, true))



Voilà...



@+! Samy
Messages postés
1575
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
21 février 2011
2
Salut

tu peux toujours mettre un
clip avec _alpha à 0 au dessus de tt les autres qui te servira de
bouton ... et tu peux lui donner la forme que tu veux



si tu souhaite vraiment jouer avec les coordonnées, va te falloir une
matric représentant les coordonées sensibles et parcourir la marice
pour savoir si t'es en zone reactive ou non

ca risque d'etre tres lourd a géré surtout jsute pour un bouton :)

++


Flash sans Limites
_Benjy chez kOlapsis

merci de penser a accepter
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021

Je viens d'essayer malheureusement quand j'utilise un clip-alpha 0, les boutons se situant en dessous de celui-ci ne fonctionnent plus!
Messages postés
1575
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
21 février 2011
2
Salut

ben oui si t'as des boutons dessous et met une action sur le clip les bouton de dessous sont inactif c normal

et les zones actives de bontons sufficent pas ?

Flash sans Limites
_Benjy chez kOlapsis

merci de penser a accepter
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Change pour des clips à la place des boutons! Comme ça, au survol de ta zone réactive tu pourras changer l'état:



zoneReactive.onRollOver=function(){

clipBoutonEnDessous.gotoAndStop(2);

}

zoneReactive.onRollOut=function(){

clipBoutonEnDessous.gotoAndStop(1);

}

zoneReactive.onReleaseOutside=function(){


clipBoutonEnDessous.gotoAndStop(1);


}



Ca devrait faire l'affaire!



@+! Samy
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Ouais...c'est vrai que le plus simple c'est de faire une zone direct
dans le bouton! Elle peut être différente de la forme de ton bouton!
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021

Ben non, sinon ce serait tout simple! En fait, concrètement, j'aimerais créer une zone de mon interface qui soit figée et inactive quand la souris en est éloignée et qui s'active quand la souris s'en approche et donc mon idée était de créer une plage de couleur qui s'illumine sous mes boutons lorsqu'on la survole et par la même occasion, déclanche aussi l'illumination de mes boutons.
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021

Oups, je répondais à Benjy!

Oui, changer mes boutons en clip, c'est ce qu'on m'a conseillé aussi ailleurs et je crois que c'est ce que je vais faire mais bon, ça veut dire aussi que je suis bon pour tout modifier surtout que mes boutons sont relativement complexes!
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
La solution des clips te permet d'illuminer plusieurs "clip-boutons" à
la fois. Pour faire un truc progressif, je vois bien un onEnterFrame
qui fasse la différence (pointRéférence-positionSouris) mais bon...ça
c'est juste une p'tite idée en passant!



@+! Samy
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Pas forcément, tu vas dans propriétés, tu changes bouton par clip et tu peux reprendre les images de tes boutons sans problème



Rq: tu peux faire un gotoAndPlay() aussi...si tu veux animer tes boutons et pas te limiter à 2 états figés.
Messages postés
1575
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
21 février 2011
2
Salut

BIEN SUR QUE SI LA FORME DE LA ZONE ACTIVE PEU ETRE DIFFERENTE DE LA FORME DU BOUTON

c'est justement l'interret de la zone active

Flash sans Limites
_Benjy chez kOlapsis

merci de penser a accepter
Messages postés
1575
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
21 février 2011
2
Salut

goldenboy > oki pour le
changement de type dans le panneau de propriete mais faut pas oublier
de le changer le type aussi dans la bibliotheque ...

ct juste pour infos :)

Flash sans Limites
_Benjy chez kOlapsis

merci de penser a accepter
Messages postés
1575
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
21 février 2011
2
Salut

j'avais pas capté un truc

tu veux activer des boutons qui sont SOUS une zone active ?? c'est bien ca en fait ?

quel est l'interret ? car t boutons vont pas se cliquer tt seuls si la sourie est pas dessus (loin de ta zone active)


Flash sans Limites
_Benjy chez kOlapsis

merci de penser a accepter
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021

Je veux que ma zone reactive lance un gotoAndPlay(); vers un clip-container dans lequel sont mes boutons!

Donc:

_root.zonereactive.onRollOver=function(){
_root.clip_container.gotoAndSto(1);
}

Dans le clip-container, de la frame 1 à 10, on a une interpolation qui amène progressivement l'illumination des boutons, lesquels se situent sur la frame 10 de mon clip-container!
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021

Je voulais dire:

_root.zonereactive.onRollOver=function(){
_root.clip_container.gotoAndPlay(1);
}

Dans le clip-container, de la frame 1 à 10, on a une interpolation qui amène progressivement l'illumination des boutons, lesquels se situent sur la frame 10 de mon clip-container!
Messages postés
1575
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
21 février 2011
2
Salut

ah ok j'avais mal suivit alors ...

en effet comme dis slagt, le hitTest devrai fonctionné nikel pour ce que tu veux faire ...

++

Flash sans Limites
_Benjy chez kOlapsis

merci de penser a accepter
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021

D'après ce que me propose Slagt et d'après ce que je lis sur la méthode hitTest:

MovieClip.hitTest(x, y, typeForme)

Ca signifie que je dois entrer les coordonnées d'une zone dans laquelle mon clip/zone reactive et les boutons entrent en collision? Comme je le comprend, dans cette zone, Flash va détecter les risques de problèmes liés à la collision et va permettre que les actions soit jouées sur les 2 objets (bouton et clip) malgré tout?
Messages postés
696
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 août 2021

Argh! Ouais mais non, je comprend pas à quoi ça me sert le hitTest!

onMouseMove = function ()
{
if (zonereactive.hitTest (_xmouse, _ymouse, true))
clip_container.gotoAndStop (1);
}

Si j'interpète correctement (mais je n'en suis pas sûr) le code de Slagt, ça signifie:

Lorsque je bouge la souris, si une collision a été détectée sur la zone réactive, alors le clip container va à la frame 1.

A quoi ça me sert? Je rappelle que j'ai besoin de pouvoir cliquer sur mes boutons sans que la collision par la zone réactive (clip) n'interfère sur leur fonctionnement. Je ne vois pas bien en quoi ça m'aide de pouvoir détecter cette collision! Ou alors, j'ai rien compris, ce qui est possible aussi!