2010-04-07 8 views
3

Je viens de jeter cet exemple de code super simple dans un script d'image IDE Flash CS4, mais il ne sort rien dans la console. Je suis simplement en train de passer ma souris au-dessus de la fenêtre, sans rien cliquer, et rien ne se passe. Pourquoi cela ne fonctionne-t-il pas comme prévu?Événement.MOUSE_LEAVE ne fonctionne pas dans AS3

stage.addEventListener(Event.MOUSE_LEAVE, traceMouse); 

function traceMouse(Evt:Event):void 
{ 
trace("Mouse Left Stage"); 
} 

________________________________________________

[EDIT] je trouve Event.MOUSE_LEAVE incroyablement inutile. d'abord, il ne fonctionne pas dans l'environnement de test (sur Flash CS4 pour Mac OS X, au moins). D'autre part, il ne se déclenche pas si MouseEvent.MOUSE_DOWN est actuellement actif:

Flash CS4 Professional ActionScript 3.0 Langue Référence:

Mise à jour 11/08/09: qualification Ajouté cet événement ne se déclenche pas lorsque le bouton est pressé. 1

dans ma situation, je voulais MOUSE_LEAVE au feu alors que je traînais un objet de telle sorte que dans le cas où l'utilisateur fait glisser son/son pointeur de la souris hors de la scène, il mettrait le feu stopDrag(). Puisque ce n'est pas possible, j'ai décidé d'utiliser MOUSE_OUT sur l'objet réel plutôt que sur MOUSE_LEAVE sur le parent ou la scène de l'objet.

private function mouseDownHandler(evt:MouseEvent):void 
    { 
    object.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); 
    object.startDrag(false, pullBounds); 
    } 

private function mouseUpHandler(evt:MouseEvent):void 
    { 
    object.removeEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); 
    object.stopDrag(); 
    } 

private function mouseOutHandler(evt:MouseEvent):void 
    { 
    object.stopDrag(); 
    } 
+0

Il fonctionne dans l'IDE Flash CS4 pour moi (Win XP), mais le fait qu'il ne fonctionne pas lorsque la souris est pressé rend Adobe est vraiment ennuyeux ces jours-ci.W BTW où avez-vous trouvé la note? Ce lien ne fonctionne pas .. –

+0

il a été écrit dans la documentation 10.0 pour Flash 10.1 sous flash.display.Stage.mouseLeave, mais ils semblent avoir – TheDarkIn1978

Répondre

1

Je ne pense pas que cet événement spécifique fonctionne dans l'environnement de création, essayez la publication d'une enveloppe HTML et en cours d'exécution dans votre navigateur.

+0

avant de poster j'ai cherché sur google ce problème, il semble que certaines personnes ne peuvent pas le faire fonctionner avec l'IDE, tandis que d'autres pensent qu'ils sont fous et cela ne leur pose aucun problème. ting?et oui cela fonctionne pour moi quand il est publié dans un navigateur – TheDarkIn1978

+1

Il pourrait être dépendant du système d'exploitation ou quelque chose, je reste aussi loin que possible de la création Flash pour les trucs de type code, donc je ne cours jamais vraiment dans ce domaine. – grapefrukt

+0

c'est une théorie intelligente. Je ne serais pas surpris si vous étiez correct puisque MouseEvent.MOUSE_WHEEL ne fonctionne pas du tout sur Mac OS X (ce que j'utilise) – TheDarkIn1978

3

Voici une des choses délicates supplémentaires couple à savoir (lors de l'exécution dans un navigateur):

Une chose bizarre est que Chrome + Firefox, l'événement MOUSE_LEAVE n'est pas distribué pour une WMODE de OPAQUE ou TRANSPARENT. Il ne tire tout simplement pas - la souris vers le bas ou vers le haut.

Avec WINDOW cela fonctionne très bien. Celui-là m'a pris beaucoup de temps pour le découvrir! grr ... http://bugs.adobe.com/jira/browse/FP-892


Deuxièmement, assurez-vous que vous utilisez Event pour le type de paramètre pour votre gestionnaire Event.MOUSE_LEAVE et non MouseEvent. Si vous essayez de gérer MOUSE_LEAVE avec e:MouseEvent vous obtiendrez une erreur que vous ne verrez peut-être jamais (sauf si vous utilisez le lecteur flash debug). C'est une erreur très facile à faire parce que vous pointez probablement tous vos autres gestionnaires vers la même méthode.

Voici ce que je fais: (juste appeler mon principal endDrag de mouseLeave(e:Event)

stage.addEventListener(MouseEvent.MOUSE_MOVE, drag); 
stage.addEventListener(MouseEvent.MOUSE_UP, endDrag); 
stage.addEventListener(Event.DEACTIVATE, endDrag); 
stage.addEventListener(Event.MOUSE_LEAVE, mouseLeave); 

private function mouseLeave(e:Event):void 
{ 
    endDrag(new MouseEvent("MOUSE_LEAVE")); 
} 

public function endDrag(evt:MouseEvent):void 
{ 
    /// handle end drag 
} 
+1

@ TheDarkIn1978 Je réalise que vous n'avez pas fait la deuxième erreur ici - mais je oublie toujours ceci et ça peut être facile à manquer –