Une aiguille de boussole qui suit la souris

finipe Messages postés 57 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 22 mars 2004 - 16 mars 2004 à 18:56
Llora Messages postés 2 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 18 janvier 2005 - 18 janv. 2005 à 12:20
Bonjour à tous.

Tout est dans le titre, je cherche un code me permettant de faire suivre la souris par la pointe d'une aiguille dont le centre sera fixe... J'ai trouvé un code faisant ça ici même, mais visiblement il est très controversé, et surtout pas expliqué du tout.

Merci pour votre aide !

PS : je travaille encore avec flash 5.0

12 réponses

hacklyn Messages postés 3 Date d'inscription dimanche 22 février 2004 Statut Membre Dernière intervention 17 mars 2004
17 mars 2004 à 02:18
slt,
Ce code est à placer dans la premiere image du clip aiguille.

this.onEnterFrame = function() {
this._rotation += Math.atan2(this._ymouse, this._xmouse)*180/Math.PI/15;
};

j'ai pas flash 5, mais l'idée est simple:
-on recupère l'angle que fait le point (_xmouse,_ymouse) DANS LE REPERE du clip de l'aiguille
-cet angle est donc celui de la rotation que doit faire l'aiguille
_pour avoir un effet elastique j'ai divisé l'angle par 15.Ce qui peut etre supprimé
0
finipe Messages postés 57 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 22 mars 2004
17 mars 2004 à 02:46
Merci beaucoup pour cette réponse claire et rapide, malheureusement, je suis un handicapé chronique du bulbe concernant flash, et je ne sais pas comment intégrer ce script : dois-je le mettre sur l'image ? sur le clip ? Avec quel événement ? Merci pour le coup de pouce :)
0
cs_tom Messages postés 1511 Date d'inscription samedi 8 décembre 2001 Statut Modérateur Dernière intervention 11 juin 2009
17 mars 2004 à 15:26
Sur le clip...
Quand on emploie this, c'est pour dire "soi-meme", donc on peut supposer qu'on parle du clip.

sur flash5, ca donnera:

on(enterFrame){
this._rotation = Math.atan2(this._ymouse, this._xmouse)*180/Math.PI;
}

De cette maniere, la pointe sera toujours face à la souris... sans effet elastique.
Pour faire un effet elastique, il y faut une difference entre l'ancienne rotation et l'angle de la souris (il manque un 'this_rotation -" dans le code plus haut).

@+ Tom
0
finipe Messages postés 57 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 22 mars 2004
17 mars 2004 à 17:06
J'ai essayé comme ça, mais si je mets le code tel quel, flash me sort l'erreur suivante :

-----------------------------
}
Scène Scène 1, Calque Calque 1, Image = 1 : Line 1: Les événements souris ne sont autorisés que pour les occurrences bouton
on(enterFrame){
Scène Scène 1, Calque Calque 1, Image = 1 : Line 2: L'instruction doit apparaître dans le gestionnaire onClipEvent
this._rotation = Math.atan2(this._ymouse, this._xmouse)*180/Math.PI;
Scène Scène 1, Calque Calque 1, Image = 1 : Line 3: '}' inattendu trouvé
}
-----------------------------

Voilà, donc du coup j'ai essayé le code suivant, un peu au pif étant donné ce qui était marqué précédemment :

-----------------------------
onClipEvent (mouseMove) {
this._rotation = Math.atan2(this._ymouse, this._xmouse)*180/Math.PI;
}
-----------------------------

... et là il se passe quelque chose, mais c'est très chaotique, ça part dans tous les sens, l'aiguille s'affole, enfin bref, l'effet escompté n'est pas le bon.

La question est donc : où me suis-je gourré ? (puisque le neuneu c'est moi %-6 )

Encore merci pour vos conseils !
0

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

Posez votre question
hacklyn Messages postés 3 Date d'inscription dimanche 22 février 2004 Statut Membre Dernière intervention 17 mars 2004
17 mars 2004 à 19:40
Pour faire un effet elastique, il y faut une difference entre l'ancienne rotation et l'angle de la souris (il manque un 'this_rotation -" dans le code plus haut).
N'a rien compris ,le tom, dans l'effet Zenon....!
:shock) :( :big)
0
cs_tom Messages postés 1511 Date d'inscription samedi 8 décembre 2001 Statut Modérateur Dernière intervention 11 juin 2009
18 mars 2004 à 00:17
Euh... oui, en effet, j'ai regardé ton code en vertical, mais vu que j'etais sur ma lancée(5eme post), j'ai rien calculé (confondu _root et this)... onclipenvent pareil...
Mais, c'est pas un effet elastique(qui irait fortement d'un coté avant de revenir et de stabiliser), c'est un effet "amorti" a la rigueur.

Pour finipe, c'est soit:

onClipEvent(enterFrame){
this._rotation += Math.atan2(this._ymouse, this._xmouse)*180/Math.PI/15;
}
pour un effet amorti,

soit:
onClipEvent(enterFrame){
this._rotation += Math.atan2(this._ymouse, this._xmouse)*180/Math.PI;
}
pour un truc bete et méchant...

soit:
onClipEvent(enterFrame){
difference = Math.atan2(this._ymouse, this._xmouse)*180/Math.PI;
this._rotation = ancienrot+ difference/15;
ancienrot = this._rotation + difference/2;
}
pour un vrai effet elastique...

voila, cette fois-ci un peu plus réfléchi...
@+ Tom
0
finipe Messages postés 57 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 22 mars 2004
18 mars 2004 à 00:29
Super génial, ça fonctionne parfaitement, un grand merci à tous :)
0
finipe Messages postés 57 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 22 mars 2004
18 mars 2004 à 00:59
Zut, il reste un problème : tout fonctionne à merveille, mais une fois le .swf intégré dans une page html, l'aiguille ne suit plus la souris hors des limites physiques du fichier .swf

Je voudrais que l'aiguille suive la souris tout le temps : est-ce possible ?
0
cs_tom Messages postés 1511 Date d'inscription samedi 8 décembre 2001 Statut Modérateur Dernière intervention 11 juin 2009
18 mars 2004 à 10:42
Malheureusement, tu arrive aux limites du flash, qui n'est actif que dans sa zone... Il n'y a pas de solution a part etendre le flash sur toute la zone de la fenetre html, ou utiliser un programme supplementaire appelé: screenweaver (à chercher sur google pour trouver des infos dessus, mais je crois que c'est utilisé uniquement dans le cas de projecteurs...)
@+ Tom
0
finipe Messages postés 57 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 22 mars 2004
18 mars 2004 à 16:10
Mince... Bon tant pis, merci pour tout quand même :)
0
Llora Messages postés 2 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 18 janvier 2005
18 janv. 2005 à 12:09
Bonjour,



J'ai essayé de faire marcher ma boussolle à partir de tout les script
existant ici et rien a faire. Celui ci est celui qi s'approche le plus
de mon souhait. L'aiguille suit effectivement le mouvement de mon
curseur mais il y a toujours un décalage de 90° environ entre mon
curseur et le bout de mon aiguille. Pourkoi ? et comment faire pour que
mon curseur soit en face de mon aiguille quand il n'y a pas de
mouvement ?

Il faut être précis avec moi aussi parce que je suis encore débutante
en flash. Je comprend vite mais il faut m'expliquer longtemps



Merci d'avance,

Llora
0
Llora Messages postés 2 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 18 janvier 2005
18 janv. 2005 à 12:20
En fait je viens de comprendre pourkoi. Je le précise pour les
prochains qui ferai la même bétise que moi : à la base j'ai dessiné mon
aiguille verticalement. Il faut la dessiner horizontalement !



Merci pour tout,


Llora
0
Rejoignez-nous