2011-02-19 8 views
0

J'espérais avoir un aperçu de la raison pour laquelle Flash agit d'une manière particulière. Voici le scénario: si vous ...Lorsque le bouton de la souris est maintenu enfoncé, pourquoi SimpleButtons ne détecte plus l'état?

1) ajouter un SimpleButton à la scène et de visualiser le fichier SWF
2) puis appuyez et maintenez le bouton de la souris vers le bas en dehors des limites du bouton
3) puis faites glisser le curseur sur le SimpleButton tout en maintenant le bouton de la souris ...

... Alors le SimpleButton sur la scène ne détecte pas le passage de la souris et affiche son état 'over'. Il reste simplement dans son état inactif. Pourquoi est-ce? Et existe-t-il un moyen d'activer le SimpleButton pour afficher son état over tant que le bouton de la souris est enfoncé et que le curseur est placé sur le dessus du bouton (comme décrit ci-dessus)?

C'est le résumé, et si vous êtes curieux (cela ne va pas élaborer sur la question, mais peut-être vous aider à visualiser un scénario pratique) ce qui motive la question, c'est une application que je construis. Dans cette application, l'utilisateur est capable de faire glisser des vignettes vidéo afin de réorganiser leur commande. Lorsqu'un utilisateur commence à faire glisser un clip vidéo, un indicateur visuel est activé pour que l'utilisateur sache où le clip sera placé lorsque l'utilisateur relâche le bouton de la souris (par exemple, le clip est en position 1 et l'utilisateur le traîne entre les clips 4 et 5 Un indicateur visuel - un SimpleButton - devrait, idéalement, montrer à l'utilisateur qu'il sera déposé entre les clips 4 et 5 si l'utilisateur relâche le bouton de la souris).

Merci pour la perspicacité!

Répondre

1

En fait, l'événement MOUSE_OVER se déclenche très bien (il suffit d'ajouter un écouteur d'événement avec une simple trace - c'est là!), Quel que soit l'endroit où le bouton de la souris a été cliqué - SimpleButton ne change pas d'état visible.

Si vous voulez que votre bouton se comporte différemment, vous devrez créer des fonctions d'écoute et changer l'état manuellement. Vous pouvez étendre la classe SimpleButton et ajouter set downState, upState et overState à visible = true; ou visible = false; dans la combinaison qui convient le mieux à votre comportement souhaité.

+0

Merci mon ami! Je suppose que la question se pose de savoir pourquoi il ne montre pas l'upState dans ce scénario, mais votre réponse est néanmoins très bonne! –

+0

De rien. Je suppose que les boutons n'étaient pas censés servir de cible, pour lesquels vous auriez besoin de la méthode onDragOver, mais comme des boutons simples (sic!). Vous devrez demander à Adobe, cependant;) – weltraumpirat

0

Il est possible de créer un gestionnaire d'événements MOUSE_MOVE et de vérifier si les coordonnées du curseur sont à l'intérieur des limites des boutons (et si elles sont - basculer sur l'état 'over').
également un auditeur MOUSE_MOVE dans l'instance de bouton peut détecter la souris au-dessus même si elle est pressée

0

Une hitTest simple entre l'icône et traîné l'indicateur visuel fonctionnerait très bien pour ce genre de chose.

Vous pourriez avoir quelque chose comme ceci:

function myHitTest(e:Event):void { 
    if (myButton.hitTestObject(myVisualIndicator)) { 
     myVisualIndicator.visible=true; 
    } else { 
     myVisualIndicator.visible=false; 
    } 
} 

Sur la souris vous pourriez mettre bas un écouteur d'événement enterFrame pour cette fonction et l'effacer sur la libération de la souris.

Questions connexes