Animation contrôlée par deux boutons, sans interruption lors du survol

Résolu
Signaler
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005
-
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005
-
Bonjour à tous

Je fais appel à vous car j'ai un problème de taille comparé à mes maigres connaissances en actionscript.
J'ai créé un petit personnage qui doit s'animer suivant un survol sur différents boutons. Par exemple si on passe sur un certain bouton, il se tourne vers lui, quand on retire la souris il revient dans sa position initiale, puis opte pour une autre attitude sur le bouton suivant...
Mon problème, c'est que si on passe rapidement d'un bouton à l'autre, l'animation est un peu "raide" puisqu'il ne termine pas son retour en position initiale dans ce que j'ai scripté...

Exemple sur un bouton :

on (rollOver) {
_root.Module2.Mascotte2.gotoAndPlay("155");
}
on (rollOut) {
_root.Module2.Mascotte2.gotoAndPlay("156");
}

Ceci donne sur une animation linéaire avec le personnage, qui à la frame 155 lance un clip d'animation "aller", et en 156 un clip "retour". Bien entendu comme ceci si on passe rapidement d'un bouton à l'autre ça fait fouilli... j'ai cherché une bonne partie de la journée sans trouver de solution efficace, peut être pourrez-vous m'aider à faire en sorte que le personnage termine son animation avant de passer à la suivante?

Merci à vous

19 réponses

Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Ok...



J'ai pas tout bien suivi avec le "_currentframe", donc je reviens en force avec mes variables! lol



avec mon premier code, on forçait la descente...on va un p'tit peu le modifier:



on (rollOver) {
if(_global.enMvt==false){
_root.Module2.Mascotte2.gotoAndPlay("155");
_global.enMvt=true;
}else{

_global.menu1=true;

}
}
on (rollOut) {

_global.menu1=false;
_root.Module2.Mascotte2.gotoAndPlay("156");
}



Sur la première image de ton animation tu mets:

this.onEnterFrame=function(){

if(_global.menu1==true){

_root.Module2.Mascotte2.gotoAndPlay("155");

}else if(_global.menu1==true){

_root.Module2.Mascotte2.gotoAndPlay("165");

}

...idem pour le nombre de menu que tu auras

}



Je crois que ça devrait marcher comme ça!



PS: il est fait avec quoi ton personnage???



@+! Samy
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
ajoute une variable booléenne et un test sur chaque bouton:

on (rollOver) {

if(_global.enMvt==false){
_root.Module2.Mascotte2.gotoAndPlay("155");
_global.enMvt=true;

}

}
on (rollOut) {
_root.Module2.Mascotte2.gotoAndPlay("156");
}



...et tu ajoutes un _global.enMvt=false; sur la dernière image de
chaque transition (ex: quand il est revenu à sa position initiale, hop
_global.enMvt=false;)



PS: j'ai rien mis sur le rollout, car si tu descends sans que l'anim du
rollover soit terminée, il reviendra jamais en position initiale!



Voilà @+! Samy
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Ou si tu ne veux pas placer du code dans tes clips (on finit par ne plus savoir ou y en a a force) tu peux vérifier dans un enterFrame ou en est la lecture de tes clip :
if (monclip._currentFrame == 123) {
mavariable = true
}

Sa permet de centraliser le code.



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005

Merci beaucoup ! je vais tester ça de suite...
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005

Ok donc là, ça me donne un peu pareil qu'une méthode que j'avais essayé :
if (_root.Module2.Mascotte2._currentframe < 155){
...

Mais en plus propre ! Encore merci :)
Le problème, c'est que si on revient sur le bouton pendant la phase descendante, ça ne détecte pas qu'on est revenu dessus, j'ai essayé en vain avec un système d'écouteurs sur les boutons... Une idée pour parfaire le tout?
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Je comprend pas bien se que tu veux dire.
Mais si c'est se que je pense :
au lieux de mettre gotoAndPlay(2)
met play()



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005

Ca vaut mieux qu'un long discour :
http://virtuagames.free.fr/test.php

Donc là c'est pas mal, sauf que pendant l'animation "retour", si on revient vite sur le bouton (ou s'ils sont côte à côte, que l'on passe de l'un à l'autre rapidement avant que cette anim ne soit terminée), ça ne détecte pas qu'on est dessus et dans ce cas ça ne rejoue pas l'animation une fois le personnage redevenu "neutre".

Pour l'instant mes tentatives pour résoudre ça sont sans succès
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Ta pas bien compris se qu'on ta dit pour al variable boolnéène.
Enfait se que tu va faire c'est que sur ton bouton avant de éxécuter l'action de on(release)
Tu met un condition qui regarde le _currentFrame
if (_currentFrame == frame_ou_le_bonhomme_regarde_le_bouton) {
//ici tu peu exécuter l'action
}
Et tu fais pareil pour le on(press)
Tu comprend ?



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005

Le on(press) ou on(release) ne sont pas ma préoccupation, ça fonctionne très bien de ce coté puisque le personnage n'est pas sensé s'animer quand qu'on clic.

C'est juste sur les rollover, si on passe au dessus (le perso bouge) tout va bien et rien d'autre ne peut influencer cette étape (grâce à votre code ci-dessus ), mais si on rollout puis rollover rapidement avant qu'il n'ait terminé l'animation qui permet de revenir à sa position initiale, il ne recommence pas l'animation de bouton "dessus". Est-ce plus clair ainsi?
Pour la phase "accueil" de mon exemple (j'ai mis à jour), le perso doit regarder à chaque fois le bouton quand on est sur un des boutons, alors que là ce n'est pas toujours le cas.
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005

Excellent ça fonctionne au poil comme ça ! Maintenant effectivement si je reste sur le bouton, ça force à nouveau l'animation. J'avoue que de le faire comme ça, je n'y aurai pas pensé. Merci

Le personnage est réalisé en 3D (aspect un peu toon) sous Cinema4D. Exporté image par image avec couche alpha afin qu'il puisse être correctement détouré une fois sous flash. facile, mais un peu long ;)
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Oups désoler
je disai on(press) ou on(release) mais c'est on(rollOut) et on(rollOver)
désoler.
Ma méthode marchais aussi mais si avec celle de goldenboy marche alors plus la peine. Utilise celle que tu comprend le mieux.



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005

Oui merci En fait comme dit lors de mes premières réponses, j'avais déjà testé la méthode _currentframe mais c'était incomplet et avait plutot en tête de placer des listeners (donc je me compliquait pour rien), il manquait une fonction qui force à nouveau l'animation comme expliqué un peu plus haut, même si j'ai bien compris que les deux méthodes sont identiques dans le fond entre vérif de frames et vérif de l'état des globales. J'ai opté pour la méthode à Goldenboy car directement exposé de façon claire et à mon avis plus courte à rédiger mais les deux sont identiques, encore merci à vous
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Mieux vaux commencé par simple.
J'avais la flemme de mettre tout le code ;) (c'est vrai quoi a 9h30 du matin :p )

Bonne continuation



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005

Merci
Pour ceux qui rencontreront le même problème, je vais préciser les changements que j'ai apporté au code ci-dessus pour que ce soit "parfait".
Pour la partie :
this.onEnterFrame=function(){
if(_global.menu1==true){
_root.Module2.Mascotte2.gotoAndPlay("155");
}else if(_global.menu1==true){
_root.Module2.Mascotte2.gotoAndPlay("165");
}
...idem pour le nombre de menu que tu auras
}
C'est }else if(_global.menu2==true){ qu'il faut mettre, puis continuer avec menu3 etc suivant le nombre de boutons.

Sinon il subsiste un tremblement entre les survols des boutons tel que c'est là. Pour résoudre ça il faut définir l'état "en mouvement" non pas sur le rollover du bouton, mais sur l'animation elle-même. Donc pendant tout le mouvement du personnage lui appliquer _global.enMvt=true; et retirer ces lignes des rollover qui deviennent :

on (rollOver) {
if(_global.enMvt==false){
_root.Module2.Mascotte2.gotoAndPlay("155");
}else{
_global.menu1=true;
}
}


on (rollOut) {
_global.menu1=false;
_root.Module2.Mascotte2.gotoAndPlay("156");
}

De même, ne pas commencer les mouvements directement, laisser une ou deux images "neutres" en début de mouvement, ça sera plus "fluide" si on passe vite fait sur plusieurs boutons à la suite.

Voilou, maintenant je vais m'amuser à rajouter d'autres mouvements à mon personnage
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Là je commence à être débordé...ça dépasse les limites de codeur! lol



Merci pour les petits tuyaux!



@+! Samy
Messages postés
1732
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
9 mars 2015
2
Eu il dois y avoir un problème dans ton code la....
this.onEnterFrame=function(){
if(_global.menu1==true){
_root.Module2.Mascotte2.gotoAndPlay("155");
}else if(_global.menu1==true){
_root.Module2.Mascotte2.gotoAndPlay("165");
}
...idem pour le nombre de menu que tu auras
}
Tu vérifie deux fois la même condition :
if(_global.menu1==true){
et
}else if(_global.menu1==true){

A l'avenir ne te sert pas tout le temp de _global
J'admet que sa sert mais en connais tu sont utilité ?
Il faut toujours faire attention avec les chemin dans flash c'est souvent la cause de problème...

Sinon content que sa marche.
(le design est super bien fait !)

Autre chose aussi
Lorsqu'on passe d'un bouton a un autre qui se situe juste au dessus ou en dessous.
Sa serai bien que le bonhomme lève simplement la tête pour si le bouton est au dessus au lieu qu'il revienne a sa position initial et rebouge la tête.
Enfin quelque modification a faire car sur lapage de test c'est pas encore parfait (a moin que tu ne l'ai pas remis a jour : si c'est le cas peut tu la mettre a jour qu'on puissse voir le résultat ?)

Bonne continuation



Blacknight91Titi
La tristesse envahit ce monde peu a peu, rongeant maison par maisons ces occupants Elle inspire la tristesse sans que personne
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
...il est plus 9h30 là Blacknight! lol



...c'est justement ce qu'il voulait mettre en évidence que j'avais fait
une erreur de copier-coller...maintenant que tout le monde le
sait...c'est fait!



Sinon pour le _global, je m'en sers de temps à autre (notamment dans
les setInterval qui font n'importe quoi parfois), mais comme je connais
pas toute la structure du code, avec _global, on est presque sûr que ça
marche à tous les coups!



@+! Samy
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Sinon, j'ai vu ta cuisine sur le forum de French Cinema 4D...pas mal!
Du coup j'ai cherché le prix du logiciel, des fois qu'il serait
freeware! lol



600 et des broutilles...ça va par rapport à Studio MX, mais bon...plus
tard, ou alors vais demander au patron si ça lui dit un peu de 3D! lol



...j'avais commencé un peu à zieuter dans Blender, mais c'était assez
laborieux et pas très intuitif les commandes! Enfin bref, la 3D ce sera
pour plus tard!



oui, si on pouvait avoir une mise à jour de ton anim, ce serait cool!
Messages postés
9
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
5 juillet 2005

Oui l'anim de test je n'ai pas mise à jour, je le ferai peut être plus tard avec plus de mouvements, ou pourquoi pas en faire une source sur le site si le code est clair, propre et utile.

Sa serai bien que le bonhomme lève simplement la tête pour si le bouton est au dessus au lieu qu'il revienne a sa position initial et rebouge la tête.
Tout à fait, mais dans ce cas, mon menu comportant 8 boutons, je te laisse imaginer le nombre de possibilités à créer en 3d, exporter sous photoshop image par image puis coder sous flash Hum, on va laisser simple...

Là j'ai apporté quelques modifs et justement je me demandais s'il ne vaudrait pas mieux mettre comme une temporisation ou utiliser la fonction de lecture inversée si on quitte par exemple le bouton avant que le personnage n'ai terminé son mouvement. Car là, ça fait encore un peu "haché" dans ce cas précis.

_global je ne connaissais pas, mais je pense que mon anim est assez "rangée" pour que ça ne pose pas de confusion quelque part... C'est en effet bien pratique même si je vais effectivement privilégier le ciblage classique. Quels sont les risques?

Merci pour la cuisine, c'est en effet un des petits projets 3d que j'ai en cours de réalisation, sympa à faire (d'ou le site portfolio avec menu en flash pour intégrer un peu de 3d animée). Le logiciel est payant (un des moins chers pourtant) mais il existe une version gratuite, avec quelques limitations, afin de se faire la main dessus.
Il y a aussi d'autres logiciels un peu pareils qui sont offerts régulièrement avec des magazines car datés de 2 voir 3 ans mais tout aussi fonctionnels. C'est vrai que Blender je ne m'y suis pas attardé car beaucoup trop complexe pour un résultat un cran en dessous.
En tout cas flash+vraie 3d ça vaut peut être l'investissement pour se démarquer.

Allez, me reste du boulot sur cette anim, mais je continuerai demain Merci à vous.