Flash AS2 Récupérer position souris quand elle sort trop vite du cadre ?

barockeuse Messages postés 23 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 30 janvier 2011 - 6 oct. 2009 à 00:33
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010 - 17 oct. 2009 à 02:12
Bonjour,

je suis en actionscript 2

j'ai un player avec des vignettes, je fais disparaitre les vignettes lorsque la souris sort du player. je teste xmouse et ymouse.

Mais quand la souris sort trop rapidement du player, le code actionscript ne s'en rend pas compte et les vignettes ne disparaissent pas, la bare de commande non plus alors que j'utilise un skin fourni par flash (clearoverall).

Donc j'aimerais pouvoir tester la position de la souris hors de la video, et aussi hos du clip des vignettes, et je ne sais pas comment faire !

Et, si j'arrive à savoir que la souris est "out" .. et bien que j'utilise le modèle "clearoverall", puis-je agir sur la présence de la barre de commande ou bien est-ce un package fermé ?

Merci de vos conseils.

7 réponses

crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
7 oct. 2009 à 22:57
Salut,

Tu ne peux pas tester la souris en dehors de la "fenêtre flash". Par contre il t'est possible de tester une inactivité de la souris pendant x secondes. Cela devient délicat si tu ne veux pas que cela fasse la même chose pour une souris inactive sur le player (mais tu peux définir un cadre).

Pour ce faire, je te déconseille l'utilisation de onRollOut mais plutôt onMouseMove, cela ne perturbera pas la lecture de la vidéo (à moins que tu fasses du 1900x1200 et encore...).

Sinon tu as une dernière possibilité, tu crées un cadre autour de ton swf qui réagira au onRollOver et qui lui lancera toutes les fonctions qui permettent de cacher tes barres et vignettes, c'est la moins gourmande de toute.
0
barockeuse Messages postés 23 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 30 janvier 2011
8 oct. 2009 à 01:07
Ha merci Crackter !

Je vois que tu touches ta bille !

J'ai constaté qu'effectivement la position souris à l'extérieur du cadre du swf n'est pas cohérente.

J'ai déjà essayé onRollOut et onRollOver .. rollover marche bien, rollOut non .. parce que sur mon player, qui occupe tout l'espace, j'ai donc des vignettes et des boutons à faire apparaitre ou disparaitre.
J'ai donc fait rollOver et rollOut sur l'objet flvplayback.
Mais quand je passe sur les vignettes qui sont sur le cadre video ça me produit un évènement RollOut et pour parer à ça je dois tester la position de la souris pour savoir si c'est un rollout extérieur à l'animation ou si c'est un rollOut à l'intérieur d'une vignette de l'animation ou sur un bouton.
Et tester la position de la souris .. on est d'accord, ça ne fonctionne pas.

Mais c'est vrai qu'avec les seuls rollout et rollover, je viens d'essayer, en évitant de passer sur les vignettes et les boutons, ça fonctionne même si on sort "un peu vite" de l'écran.

Du coup .. ton idée de cadre pourrait convenir à condition qu'il n'y ait pas de roll out quand on passe sur un objet à l'intérieur du cadre. Si tu penses que c'est possible, comment je fais ce cadre ? un grand rectangle vide tracé en périphérie du flvplayback ? Quel type d'objet ?
Et comment faire pour qu'il n'ait pas de lien de parenté avec le flvplayback et les autres objets (vignettes et boutons) posés dessus ?

Sinon .. l'idée de détecter l'immobilité de la souris est bonne et conviendrait bien à ce que je veux faire.
Mais j'ai peur du coût en temps CPU à cause de l'évènement onMouseMove et le pb de la mesure du délai max d'immobilité pour lequel il faut un timer je pense (setinterval).. Qu'il faudra arrêter et relancer à chaque interruption de mouvement de souris .

En tous cas, c'est super sympa de me donner un coup de main aussi avisé !
Merci .
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
8 oct. 2009 à 18:38
Salut,
l'utilisation du setInterval ne prendra pas trop de ressources cpu, don't worry. Ne fais pas d'intervalles trop petites tu n'en a pas l'utilité dans ton cas (une veille c'est environ entre 2 et 5 secondes, pas 2millisecondes).

Soit tu attends la fin de mouvement souris (onMouseMove) afin de faire un setInterval qui lancera ta "veille", soit l'inverse, c'est à dire faire un setInterval qui lui va détecter depuis combien de temps ta souris est inactive. C'est à toi de choisir ce qui te va le mieux.

Je suis en train de penser à l'utilisation du trackasmenu aussi, je testerai ça tout à l'heure pour te tenir informé.

A plus.
0
barockeuse Messages postés 23 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 30 janvier 2011
9 oct. 2009 à 01:33
Merci ....

tu as écrit

Soit tu attends la fin de mouvement souris (onMouseMove) afin de faire un setInterval qui lancera ta "veille", soit l'inverse, c'est à dire faire un setInterval qui lui va détecter depuis combien de temps ta souris est inactive.

Attendre la fin du mouvement souris .. mais en fait comment marche cet évènement MouseMove ? il se déclenche à chaque pixel du déplacement ? ou le système évalue-t-il qu'il y a une continuité dans le déplacement et quend cette continuité parait cesser, il déclenche l'évènement ?

Au MouseMove, je pensais déclencher une fonction qui lance un timer (oui, de 2 sec par ex) mais qui commence pas arrêter le précédent.

Le timer lui, s'il se déclecnhe, cela signifie qu'il n'y a pas eu de mouvement de souris depuis 2 secondes..

ça irait comme ça ?

Mais au fait, onMouseMove ne s'enclenche pas j'espère quand la souris évolue au dehors de la fenêtre flash ?
Je vais tester quand même ..

Merci de ton aide avertie !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
9 oct. 2009 à 09:23
oui onMouseMove se déclenche à chaque mouvement de souris.

var idInterval:Number;

this.onMouseMove = function() {
clearInterval(idInterval);
idInterval = setInterval(lancerVeille,3000);
}

function lancerVeille() {
trace("veille");
}
0
barockeuse Messages postés 23 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 30 janvier 2011
17 oct. 2009 à 01:05
[u]J'ai appliqué ces principes, ça marche très bien !

Merci beaucoup !
/u
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
17 oct. 2009 à 02:12
[^^happy10]
0
Rejoignez-nous