AS3 problème avec Event listener Child et Parent

KEN_OH Messages postés 3 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 6 décembre 2008 - 4 déc. 2008 à 14:57
barockeuse Messages postés 23 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 30 janvier 2011 - 6 oct. 2009 à 21:42
j'ai vraiment fait trop de recherche avant de poser ma question sur ce forum.
bref voila mon problème :
je suis entrain de crée un site web qui contient un barre en bas ou lorsque on met la souris dessus elle affiche une zone ou il y a un contact et projet futured.
j'explique plus le concept : cette barre est un clip que j'ai ajoutée deux EventListener : un MOUSE_OVER et un MOUSE_OUT . dans ce même clip il y a le clip de contact et un clip de futured.

PRROBLEME : Lorsque je passe le souris en dessus du clip j'ai l'animation et la barre s'ouvre MAIS lorsque je passe sur un clip Child ( contact et futured ) c'est comme si j'ai fait un MOUSE_OUT de la zone malgrè que je suis sur le même clip.

CODE :

// Import
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;

//Initialisation
var posnews:int = 0;
var depl:int;
stage.scaleMode="noScale";
stage.align="T";
init();
//
stage.addEventListener(Event.RESIZE, immoresize);
news.addEventListener(MouseEvent.MOUSE_OVER, opennews,false,0,true); //news est le nom de la barre
function init():void
{
    news.x=-(Math.round((stage.stageWidth-1050)/2));
    news.y=500;
    menu.x=-(Math.round((stage.stageWidth-1050)/2));
    menu.y=-27;
    menu.nav.x=stage.stageWidth - 340;
    depl = stage.stageHeight - 400;
}

function opennews(e:Event):void
{
    if (stage.stageHeight<960) {
        news.removeEventListener(MouseEvent.MOUSE_OVER, opennews);
        var tw = new Tween(news, "y", Bounce.easeOut, 500, depl, 1.5, true);
        tw.addEventListener(TweenEvent.MOTION_FINISH, onFinish);
    }
}

function closenews(e:Event):void
{
    if (stage.stageHeight<960) {
        news.removeEventListener(MouseEvent.MOUSE_OUT, closenews);
        var tw = new Tween(news, "y", Bounce.easeOut, depl, 500, 1.5, true);
        tw.addEventListener(TweenEvent.MOTION_FINISH, onFinish1);
    }
}

function onFinish(e:TweenEvent):void {
    posnews=1;
    news.addEventListener(MouseEvent.MOUSE_OUT, closenews,false,0,true);
}

function onFinish1(e:TweenEvent):void {
    news.addEventListener(MouseEvent.MOUSE_OVER, opennews,false,0,true);
    posnews=0;
}

//le code est un peut en desordre avec des instruction en trop car j'ai fait plusieur essais et c'est le plus stable.
meci pour vos reponses !
A voir également:

8 réponses

cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
4 déc. 2008 à 17:42
Salut,
pour ma part je galère avec l'as3, mais j'ai vu un truc qui concernait ce type de problème (ou approchant) et il falait cibler le clip qu'on voulait désactiver avec mouseChildren = false;
Donc pour toi contact.mouseChildren = false et futured... à moins que ce soit le contraire ou que cela ne fonctionne pas du tout !  
Bonne chance

Tout vient à qui sait attendre
0
KEN_OH Messages postés 3 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 6 décembre 2008
5 déc. 2008 à 11:59
Merci pour votre réponse mais en utilisant le mouseChildren = false; je peut plus crée des boutons dans le clip Child (contact ou futured ) ce qui est nécessaire pour passer le formulaire de contact ou autre .
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
5 déc. 2008 à 14:10
Désolé, ce doit être une question "d'écouteur"... je sais pas comment, mais il doit être possible de bloquer les choses fonction de la position de ta souris., du genre, si ma souris est en dessous de telle position, mon truc s'active, si elle est au dessus, mon truc se désactive.
Je sais, ça te dis pas comment faire, mais c'est peut-être une autre piste.

Bon courage

Tout vient à qui sait attendre
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
6 déc. 2008 à 12:26
pour résoudre ton soucis, il y a plusieurs manière, mais une des plus simples reste quand meme le fait de gérer un autre clip sur ta scène, je m'explique :

XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX
OOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOO

image que les X sont un clip qui correspondent au fond de ta scène et les O ton clip de news, il suffirait de mettre les évènements MOUSE_OVER sur les O pour ouvrir les news et MOUSE_OVER sur les X pour fermer les news. le MOUSE_OVER de news s'efface quand tu survol les O et revient quand tu survol les X.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
6 déc. 2008 à 12:27
P.S. : donc tu ne gères pas de MOUSE_OUT sur tes news (je sais pas si je suis très clair :p)
0
KEN_OH Messages postés 3 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 6 décembre 2008
6 déc. 2008 à 12:59
XD
Merci beaucoup c'est une bonne idée, je l'utilisais avant sous Macromedia Director car il y avait un conflit avec le MouseOut. je sais pas pourquoi je l'ai oublié .
re merci, je vais l'implémenter immédiatement.
j'ai eut par contre une autre idée voila un schéma avec des "O" , des "X" et des "="

XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXX
===============================
OOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOO

"X" = scène principal
"O" = clip news
"=" = bordure du clip news

j'ai eut l'idée de faire un EventListener sur la scène principale (X) qui détecte la position de la souris puis je gère le deplacement de la barre news selon la position de la souris par rapport a la position Y du clip news : si la souris est en dessus je fait l'action RollOut sinon l'action du RollOver.

mais je vais utiliser votre solution
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
6 déc. 2008 à 16:07
Oui ça peut être une autre idée, suivant le besoin derrière ça peut être même plus intéressant, après tout dépend du besoin :).

Sinon à savoir que l'écouteur écoute (woaa c'est magique ^^) chaque évènement d'après un dispatchEvent envoyé par l'objet en question, c'est à dire que le rollover est lancé moins souvent qu'un mousemove ou qu'un enterframe (normalement ) donc moins gourmand en ressources.
0
barockeuse Messages postés 23 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 30 janvier 2011
6 oct. 2009 à 21:42
Je sais que je réponds un peu tard .. mais ça pourra servir à d'autres.

Il semble que ce soit le choix de la méthode.

Pour récapituler :

* MOUSER_OVER et MOUSE_OUT notifie chaque clip survolé par la souris, pères et fils ..
* ROLL_OVER et ROLL_OUT notifie uniquement le survol du clip écouté (indépendamment des clips à l'intérieur)

Voir ce lien http://www.astorm.ch/blog/index.php?post/2008/03/13/rollOver/rollOut-vs-mouseOver/mouseOut

"L'événement rollOut a pour objet de simplifier le codage des comportements de survol des conteneurs d'objet d'affichage avec enfants. Lorsque la souris quitte la zone d'un objet d'affichage ou de l'un de ses enfants pour atteindre un objet qui ne fait pas partie de ses enfants, l'objet d'affichage distribue l'événement rollOut. Ce comportement diffère de celui de l'événement mouseOut, qui est envoyé lorsque la souris quitte la zone d'un objet enfant du conteneur d'objet d'affichage, même si la souris reste au-dessus d'un autre objet enfant du conteneur d'objet d'affichage."

ça répond peut-être à la question ...
0
Rejoignez-nous