2009-05-30 8 views
1

Je commence à avoir un comportement inhabituel que je n'arrive pas à comprendre. Quand je cours ceci, si je bouge dans la zone de swf il trace normalement sur le mouvement de souris. Être attendu.Projet AS3 - Écouteur de déplacement de souris réagissant en dehors de l'application

Mais il trace pour l'événement de déplacement lorsque je clique n'importe où à l'écran. Si je clique et fais glisser, il trace comme si je me déplaçais dans la zone swf du navigateur.

Voici le code. J'ai simplifié à son barebones. Il suffit de mettre cela dans un projet AS3 vide dans Flex appelé "Moteur" - sans les guillemets évidemment.

package { 
import flash.display.Sprite; 
import flash.events.MouseEvent; 

[SWF(width='640', height='360', backgroundColor='#888888', frameRate='31')] 
public class Engine extends Sprite 
{  
    public function Engine() 
    { 
     // Add the mouse handlers 
     stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
    } 

    public function mouseMoveHandler(evt:MouseEvent):void 
    { 
     trace("move"); 
    } 
} 
} 

Pour contourner ce problème, j'ai ajouter le MOUSE_MOVE un MOUSE_OVER et retirez-le sur MOUSE_OUT. Mais le comportement semble toujours assez inhabituel et je serais intéressé à comprendre pourquoi cela se passe.

Quelqu'un peut-il me dire comment je peux garder les événements contraints à l'étape actuelle de l'application?

Répondre

0

Si vous cliquez à l'intérieur de votre animation Flash et faites glisser la souris en dehors de celle-ci, l'événement MOUSE_MOVE continuera à se déclencher jusqu'à ce que vous relâchiez votre souris. MOUSE_LEAVE ne se déclenchera que lorsque vous relâcherez la souris en dehors du lecteur. C'est ainsi que fonctionne Flash Player.

Peut-être que je me trompe mais je ne pense pas que vous pouvez changer ce comportement.

+1

Oui, ce serait logique. Ce n'est pas le comportement dont je parle. Si je clique sur * N'IMPORTE O * * sur l'écran ... une autre application, une barre d'Apple, peu importe ... elle enregistre un événement de mouvement. Même s'il n'y a aucun moyen possible pour Flash d'avoir le focus. – grey

+0

Désolé, je ne peux pas reproduire ce comportement avec votre code. Pouvez-vous poster plus de détails comme la version FP, OS, ... –

+0

Certainement, désolé pour le retard dans la réponse. Version Flash Player - Mise au point, MAC 10,0,22,87 – grey

1

Comme déjà mentionné, vous ne pouvez pas empêcher ces événements de se déclencher. Ils sont déclenchés jusqu'à ce que vous relâchiez la souris.

Ce que vous pouvez faire est de comparer les coordonnées de MouseEvent avec les limites de la scène et d'ignorer celles de l'extérieur.

public function mouseMoveHandler(evt:MouseEvent):void 
{ 
    if (evt.stageX >= 0 && evt.stageX <= stage.stageWidth && 
     evt.stageY >= 0 && evt.stageY <= stage.stageHeight) 
    { 
     trace("move"); 
    } 
} 
+0

Encore une fois. Je ne parle pas seulement quand le swf ou même le navigateur a le focus. TOUS les clics enregistrent un événement de déplacement dans n'importe quelle application, quel que soit le focus. – grey

Questions connexes