J'ai un projet avec Flash Professional CS5 et ActionScript 3. P>
J'ai besoin de déclencher un événement lorsque je traîne un objet sur un endroit particulier, mais je n'ai pas encore laissé tomber. Ensuite, je dois déclencher un événement différent lorsque je quitte cet endroit (traînant toujours). Cependant, cela ne devrait se produire que pendant que je traîne sur l'objet. P>
Les événements traditionnels de la souris sur la souris et la souris ne fonctionnent pas tout en faisant glisser (seulement tout en faisant glisser). P>
Comment puis-je faire cela? P>
3 Réponses :
La raison pour laquelle il ne fonctionne pas est que le top displayObject (celui en cours d'entraînement, vole les événements pour elle-même).
Vous avez quelques options, 1st ajout de l'événement de la souris_move à l'objet glissé au lieu du particulier. spot, et vous pouvez faire un HitTestObject () Pour vérifier si elles se chevauchent, ou un HitTestPoint () si la souris est à l'intérieur de l'endroit particulier. P>
Donc cela: P>
draggedObject.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); function onMouseMove(evt : MouseEvent) : void { var particularSpot : MovieClip = MovieClip(evt.currentTarget.parent).getChildByName("particular spot object name"); if(particularSpot.hitTestPoint(evt.mouseX, evt.mouseY)) // or use hitTestObject { // The mouse is on top of particular object } else { // The mouse is not on top of particular object } }
Votre deuxième option ne briserait pas le glisser si l'auditeur MouseEvent.mouse_Up a été ajouté à la scène.
Parfait! Ce sont deux fonctions très utiles! Tout comme une note, le code exemple était beaucoup trop surchargé. Réponse acceptée, avec ma simplification de travail dans la modification.
Si vous construisez à la construction de l'exécution de l'air, vous pouvez essayer d'utiliser le NationRagenter événement: P>
expédié par un interactifobject lorsqu'un gestes de traînée entre dans sa limite. P> blockQuote>
et le NationRagexit événement: p>
expédié par un interactifobject lorsqu'un geste de traînée laisse sa limite. P> blockQuote>
Pourquoi le -1? J'aimerais connaître la situation dans laquelle cela ne fonctionnerait pas.
Par conséquent, si cette réponse est correcte ou non dans mon cas, les Docs le sauvegardent. Ergo, cette réponse est utile. (S'il vous plaît ne pas savoir si vous ne pouvez pas savoir si "la réponse n'est pas utile", peuples)
Au fait, cela ne fonctionne que sur le temps d'exécution de l'air que j'utilise.
@ Jasonmc92 - Vous avez totalement raison! J'ai supposé parce que les événements dans les docs n'avaient pas le symbole de l'air à côté d'eux qu'ils n'étaient pas seuls à l'air. Une fois que j'ai enlevé le temps d'exécution de l'air du filtre, cependant, "Poof" - ils étaient partis. Je pensais que le "natif" était un terme étrange, mais j'ai compris qu'il avait été assimilé à la FP normale, mais gardé le nom. Devinez cela explique le -1!
Néanmoins, -1 devrait toujours inclure une explication, IMHO.
Ceci est incompatible avec le démarrage traditionnel de Flash ... des pommes et des oranges.
Appelez simplement Voir: ActionScript 3: Obtenez un objet d'affichage à Pixel < / p> ObjectContainer.getObjectSunderPoint (nouveau point (Mousex, Mousey)) CODE> et vous obtiendrez tous les objets sous ce point et vous pouvez boucler leur bac et vérifier si l'un d'entre eux est un ` Drop Target. P>
GetObjecteSunderPoint utilise de manière nativement HittestPoint pour vérifier tous les écrans du conteneur.
Ah bon? Je ne savais pas ça, éditer la réponse. Mais néanmoins, il est probablement beaucoup plus rapide de le faire en pure C ++ plutôt que d'appeler des dizaines d'appels de fonctions dans une boucle comme vous ne le pensez pas?
L'optimisation est une affaire délicate, je ne dirais pas qu'une fonction obscure est plus rapide qu'une autre fonction obscure sans le tester auparavant. Mais s'il ne vérifie que si un MovieClip est sous la souris, je ne vois pas la nécessité de les trouver.
C'est bon à savoir, même si ce n'est pas le plus efficace dans ce cas. Hittspoint fonctionne mieux à cet effet ici, mais j'encourage d'autres programmeurs à se souvenir de cette fonction!
Je n'ai pas le temps de répondre, mais la raison pour laquelle les événements ne tiraient pas, c'est qu'il y a un autre objet de la manière (celle-ci en train d'être traîné), de sorte que les objets sous ne sont pas entrés / laissent des événements. Il y a une variété de façons autour de cela, y compris la lecture avec la propriété
MOUSECHILDRENES CODE> GLOGÉE (essayez de la définir sur FALSE) ou configurez un écouteur temporaire pour les événements de déplacement de la souris sur la scène conjointement avec
getObjectsunderpoint () code>