2009-08-21 3 views
1

je rencontrais cette situation vraiment bizarre, j'ai ce bar et j'addEventListener à lui, alors quand de la barre cliqué, trace localXAS3 MouseEvent localX agissant bizarre

private function _barClicked($e:MouseEvent):void { 
     trace($e.localX) 
} 

La chose étrange est que, lorsque vous cliquez sur le même endroit, parfois il saute à un mauvais numéro dont je ne peux pas comprendre pourquoi, j'ai tracé la largeur de la barre, et c'est la bonne valeur, le localX est juste en me donnant des nombres aléatoires. Est-ce que quelqu'un a déjà rencontré ce problème? Merci!

Répondre

6

Hmmm, étrange

J'ai essayé un scénario simple où j'ai un rectangle nommé « barre » et coller votre écouteur pour l'événement CLICK, puis essayé l'événement MOUSE_DOWN. Les deux ont bien fonctionné. Je n'ai pas obtenu de valeurs aléatoires.

Je suppose que votre barre d'outils contient d'autres objets à l'intérieur et que vous pourriez obtenir des valeurs d'enfants de barre, pas de barre elle-même. Pas sûr cependant, c'est juste une supposition. Vous pouvez essayer de vous assurer que vos valeurs proviennent de $ e.currentTarget car $ e.target peut changer selon: votre clip et le nombre d'enfants qu'il contient, la position du clic et la phase de l'événement.

Essayez

private function _barClicked($e:MouseEvent):void { 
     trace($e.currentTarget.mouseX); 
} 

Hope it helps!

+4

Je suis tombé sur ce scénario, et c'était exactement à cause de la raison pour laquelle George le signale. Cependant, un collègue a fait remarquer que la position de la souris aurait pu se déplacer entre le moment de l'événement et le moment où vous interrogez mouseX sur le currentTarget. Donc, dans les situations où vous avez besoin de connaître la position exacte où l'événement s'est produit, il est préférable de calculer les coordonnées locales en utilisant e.currentTarget.globalToLocal (new Point (e.stageX, e.stageY)). –

2

J'avais le même problème, et la solution Kevin Condon du commentaire ci-dessus a aidé mon problème. Je ne fais que le poster ici, parce que j'ai failli le manquer dans le commentaire.

private function _barClicked($e:MouseEvent):void { 
    var coord:Point = $e.currentTarget.globalToLocal(new Point($e.stageX, $e.stageY)); 
    trace(coord.x); 
} 

Merci Kevin.

2

Je voulais juste noter une variation sur ce problème pour ceux pour qui ce qui précède ne fonctionne pas.

J'avais le même problème - localX montrant des valeurs impaires. Les miens n'étaient pas aléatoires, juste plus bas que ce à quoi je m'attendais. C'est-à-dire, cliquez sur l'extrême droite de l'image-objet et obtenez seulement 17,2, événement bien que la largeur soit 160.

Ce que j'ai trouvé était que mon instance était une version à l'échelle d'un symbole dont la largeur native était beaucoup moins. Une fois que je l'ai configuré pour que le symbole et l'instance aient la même largeur, j'ai commencé à obtenir les bonnes valeurs.

Espérons que cela aide quelqu'un.

1

Si trouvé que tant que j'utilise la solution que Kevin Condon proposé des différences de mise à l'échelle entre différents symboles sont pris en compte et tout fonctionne bien.