Un script qui ne tourne qu'une fois [Résolu]

Signaler
Messages postés
2203
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
26 janvier 2010
-
Messages postés
12
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
14 septembre 2005
-
Je poste pour LABOBINETTE qui a des soucis avec la TexBox du Forum, voici sa question :

Bonjour,le script ci-dessous fonctionne mais seulement 1 fois.
Je voudrais qu'il soit valide tout le temps. Le principe : quand on clic sur
un bouton ça fait déplacer simultanément d'autres boutons. Leur déplacement
et leur arret sont fonction de leurs positions initiales.Je débute et j'ai
bidouillé ce script à partir d'un autre trouvé sur le net alors il va
peut-etre vous sembler un peu tordu... Est-ce que quelqu'un pourrait
m'aider? Merci d'avance!


on (release) {

xPositionIllustration = this.BTillustration. _x;
xPositionScenographie = this.BTscenographie. _x;
xPositionDivers = this.BTdivers. _x;
xPositionCvinfos = this.BTcvinfos. _x;

///// G1
G1 (xPositionIllustration 19) && (xPositionScenographie == 38) &&
(xPositionDivers 57) && (xPositionCvinfos 76);

if (G1)
{
//fonction pour le mouvement

x1 = 19;
x2 = 492;

barycentre = function(a, b, t) {
return (1 - t)*a + t*b;
}

dt = 1/25 ;
t = 0;

this.lineStyle(0, 0x666666, 0);
this.moveTo(x1);
this.lineTo(x2);


onEnterFrame = function() {

t += dt;

BTillustration._x = barycentre(x1, x2, t);
BTscenographie._x = barycentre(x1+19, x2+19, t);
BTdivers._x = barycentre(x1+38, x2+38, t);
BTcvinfos._x = barycentre(x1+57, x2+57, t);

if(t >1) {t 1; dt = 0;} else {
if(t <=0) {t = 0; dt = 0;}

}
}
}

////////////////////////

/////G2
G2 (xPositionIllustration 492) && (xPositionScenographie == 511) &&
(xPositionDivers 530) && (xPositionCvinfos 549);

if (G2)
{
//fonction pour le mouvement

x1 = 492;
x2 = 76;

barycentre = function(a, b, t) {
return (1 - t)*a + t*b;
}

dt = 1/25 ;
t = 0;

this.lineStyle(0, 0x666666, 0);
this.moveTo(x1);
this.lineTo(x2);


onEnterFrame = function() {

t += dt;

BTillustration._x = barycentre(x1, x2, t);
BTscenographie._x = barycentre(x1-19, x2-19, t);
BTdivers._x = barycentre(x1-38, x2-38, t);
BTcvinfos._x = barycentre(x1-57, x2-57, t);

if(t >1) {t 1; dt = 0;} else {
if(t <=0) {t = 0; dt = 0;}

}
}
}
}

13 réponses

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

Tu crées des "onEnterFrame" qui ne sont jamais supprimés...à éviter!

Ensuite, si ça marche la première fois, c'est que t'as bidouillé le code avec les positions de départ de tes boutons non? (pour que G1=true ou G2=true)

Mais une fois que t'as fait bouger tes boutons, c'est normal que G1=false ou G2=false...faudrait un gros coup de bol pour que les boutons passent sans arrêt de G1 à G2! lol ...oups, viens de penser à un truc...c'est ça que tu veux? Que ça passe de G1 à G2 et inversement tout le temps?

Faudrait des infos complémentaires pour savoi ce que tu veux exactement (condition d'arrêt...faire un trace() de la position de tes boutons en cours de déplacement et observer l'évolution)

Voilà voilà...

@+! Samy
Messages postés
2203
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
26 janvier 2010

"En gros, pour décrire le truc, mes boutons sont des barres intialement collées les unes aux autres et qui se séparent ou se rapprochent en fonction des clics. Quand elles se séparent elles ouvrent un espace dans lequel des images s'affichent et quand elles se rapprochent elles ferment cet espace."

C'est un peu le style du composant "Accordion", mais à la verticale
Messages postés
2203
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
26 janvier 2010

"Tu crées des "onEnterFrame" qui ne sont jamais supprimés...à éviter!"
exact, et un "onEnterFrame" ne se place pas sur un bouton !
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
Ah ben oui...même pas vu qu'c'était sur un bouton...tellement pas l'habitude d'utiliser des boutons! lol



avant de faire:

xPositionIllustration = this.BTillustration. _x;

xPositionScenographie = this.BTscenographie. _x;

xPositionDivers = this.BTdivers. _x;

xPositionCvinfos = this.BTcvinfos. _x;



fais:

trace(this.BTillustration._x);

trace(this.BTscenographie._x);

...



et vérifies ce que tu obtiens...si c'est pareil que G1 ou G2, ça
devrait être bon...mais bon, faut régler l'histoire du onEnterframe
(même si ça le fait une fois, ça devrait fonctionner)



Pour le supprimer, rajoute:

if(t >1) {t 1; dt = 0;delete this.onEnterFrame;} else {

if(t <=0) {t = 0; dt = 0;delete this.onEnterFrame;}

...va savoir si ça marche sur des boutons, jamais essayé!



@+! Samy
Messages postés
2203
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
26 janvier 2010

"Pour le supprimer, rajoute:
if(t >= 1) {
t 1; dt 0;delete this.onEnterFrame;
} else {
if(t <=0) {
t 0; dt 0;delete this.onEnterFrame;
}"
...va savoir si ça marche sur des boutons, jamais essayé!
Non Samy, ça ne marche pas sur des boutons ça c'est sûr (voir C.Moock) et perso le code je le présente comme ci-dessus.
Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
m'en doutais un peu (pas encore lu ce fameux bouquin! lol).



Pour le code, moi aussi je l'écris différemment, j'ai simplement repris
le morceau existant pour ajouté ce que je pensais qu'il fallait ajouter.



Chez moi sur un clip, ça donnerait:

this.onRelease=function(){

...

this.onEnterFrame=function(){

t += dt;



BTillustration._x = barycentre(x1, x2, t);

BTscenographie._x = barycentre(x1-19, x2-19, t);

BTdivers._x = barycentre(x1-38, x2-38, t);

BTcvinfos._x = barycentre(x1-57, x2-57, t);



if(t >= 1) {

t = 1;

dt = 0;

delete this.onEnterFrame;

}

if(t <=0) {

t = 0;

dt = 0;

delete this.onEnterFrame;

}

}

}



J'crois qu'on se rejoint dans notre écriture!



@+! Samy
Messages postés
2203
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
26 janvier 2010

Courage labobinette !
c'est en perséverant qu'on y arrive.
On bosse por toi, mais avec une autre approche, on te tient au courant

Alise
from RunIsland
Messages postés
12
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
14 septembre 2005

Non, ce n'est pas exactement ça. ça ne doit pas passer seulement de l'un à l'autre quand tu clic. Il y aura d'autre "combinaisons" possible. Il y aura un G3, un G4 et un G5. Ces 3 autres positions seront provoquées, elles, par d'autres boutons. Au clic sur le bouton qui contient le script ci-dessus, il y aura G1 ou G2 ou G3 ou G4 ou G5 qui sera vérifié. En tout j'ai 5 boutons et chacun de ces boutons a 5 combinaisons possible.

En gros, pour décrire le truc, mes boutons sont des barres intialement collées les unes aux autres et qui se séparent ou se rapprochent en fonction des clics. Quand elles se séparent elles ouvrent un espace dans lequel des images s'affichent et quand elles se rapprochent elles ferment cet espace.

Je ne sais pas si c plus clair ou si je t'embrouille davantage là...
Messages postés
12
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
14 septembre 2005

Mais bon pour l'instant, il n'y a pas les autres combinaisons, donc, oui, j'imaginais que ça allait passer de l'un à l'autre à chaque clic puisque une fois que le script associé à G1 se termine, les bouton se retrouvent dans les positions adequats pour que G2 se réalise et inversement. Ah mais c'est vrai que la position des boutons se détermine par rapport à x1 et x2 que j'ai bidouillé... et non pas par rapport à la scène...
Messages postés
12
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
14 septembre 2005

fais:
trace(this.BTillustration._x);
trace(this.BTscenographie._x);
...

et vérifies ce que tu obtiens...si c'est pareil que G1 ou G2, ça devrait être bon...


C'est pareil que G1 et G2 aux 2 premiers clics et apres ça s'inverse.
J'ai :
19, 38, 57, 76 (G1) ET 492, 511, 530, 549 (G2) PUIS 76, 57, 38, 19 (l'inverse de G1).

Mais en fait c'est normal puisque j'ai inversé les valeurs de x1 et x2 en G2. Il garde ces dernières valeurs. Bon je penche là-dessus... faut une autre fonction.

Sinon pour les onEnterFrame, g essayé de placé le script entier sur un clip vide placé sur la même frame mais je ne sais pas comment le lier au clic sur le bouton.

Sinon g aussi essayé de mettre le script en action d'image avec au début :

this.BTgraphisme.onRelease = funtion () {

(BTgraphisme c le bouton sur lequel j'avais placé le script au départ) Mais il n'y a que g1 qui fonctionne quand je fais ça.
Mais je n'ai pas encore essayé ton dernier code goldenboy... Avec tout ça je devrais y arriver!
Messages postés
2203
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
26 janvier 2010

Je t'envoi par mail un simple exemple "pure anim flash", mais qui je pense fonctionne selon tes désirs, c'est le B.A BA animflash réduit en un simple MC.
Demain je te prépare un ex en progra avec un "ralenti", je mettrais à dispo le code pour qui sera intéressé.
Bonne soirée.

Alise
from RunIsland
Messages postés
12
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
14 septembre 2005

ok merci c'est sympa de m'aider et de m'encourager. Je pourrais faire tout ça avec les outils de dessins, interpolations, etc... Mais j'ai commencé à mettre le nez dans action script...

Sinon j'ai essayé de placer le code de goldenboy sur un clip avec un onClipEvent(load), et là ça ne fonctionne plus du tout (pourtant je n'ai pas oublié de modifier les ciblages en conséquence). J'ai essayé aussi ce code direct sur la première image d'un clip dont l'occurence est placé sur la meme frame que les boutons (là encore g bien vérifié les ciblages) et ça ne fonctionne pas davantage.

En conservant le script sur le bouton mon truc fonctionne comme je le souhaite (à peu près) si je rajoute un G1bis (valeurs inverses de g1) et le if(G1bis) qui va avec. Mais bon, là ça commence à être sacrément alambiqué tout ça... Il doit certainement y avoir plus simple! Ca suppose de faire la meme chose pour tous les "G" puis ensuite pour chacun des 5 boutons!!! Et en plus, c'est pas terrible, ça saccade un peu.

En tout cas je vais chercher ce fameux bouquin de C. Moock... Pour les débutants c'est compréhensible?
Messages postés
12
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
14 septembre 2005

Bon, ça marche cette fois pour de bon!
Il y avait juste une erreur dans les valeurs de x1 et x2 de G2 et une erreur dans les valeurs de barycentres de G2. J'ai intégré au code les delete this.onEnterFrame.
J'ai compris qu'il ne fallait pas utiliser des EnterFrame sur des boutons mais ce que je n'ai pas compris c'est pourquoi? D'autant plus que mon code ne fonctionne QUE sur le bouton. Du coup, pour l'instant je l'ai laissé sur le bouton... Mais si ça n'est pas convenable... quelqu'un peut-il me dire comment le mettre ailleurs et pourquoi il faut absolument le mettre ailleurs ?
Merci de votre aide!

Ci-dessous, le code corrigé (mais toujours avec onRelease...

on (release) {

trace(this.BTillustration._x);
trace(this.BTscenographie._x);
trace(this.BTdivers._x);
trace(this.BTcvinfos._x);

xPositionIllustration = this.BTillustration. _x;
xPositionScenographie = this.BTscenographie. _x;
xPositionDivers = this.BTdivers. _x;
xPositionCvinfos = this.BTcvinfos. _x;

G1 (xPositionIllustration 19) && (xPositionScenographie == 38) && (xPositionDivers == 57) && (xPositionCvinfos == 76);
G2 (xPositionIllustration 492) && (xPositionScenographie == 511) && (xPositionDivers == 530) && (xPositionCvinfos == 549);


//G1

if (G1)
{

x1 = 19;
x2 = 492;

barycentre = function(a, b, t) {
return (1 - t)*a + t*b;
}

dt = 1/5;
t = 0;

this.lineStyle(0, 0x666666,0);
this.moveTo(x1);
this.lineTo(x2);


onEnterFrame = function() {

t += dt;

BTillustration._x = barycentre(x1, x2, t);
BTscenographie._x = barycentre(x1+19, x2+19, t);
BTdivers._x = barycentre(x1+38, x2+38, t);
BTcvinfos._x = barycentre(x1+57, x2+57, t);
if(t >= 1) {
t = 1;
dt = 0;
delete this.onEnterFrame;
}
if(t <=0) {
t = 0;
dt = 0;
delete this.onEnterFrame;
}
}
}

//G2
else if (G2)
{

x1 = 492;
x2 = 19;

barycentre = function(a, b, t) {
return (1 - t)*a + t*b;
}

dt = 1/5 ;
t = 0;

this.lineStyle(0, 0x666666, 0);
this.moveTo(x1);
this.lineTo(x2);


onEnterFrame = function() {

t += dt;

BTillustration._x = barycentre(x1, x2, t);
BTscenographie._x = barycentre(x1+19, x2+19, t);
BTdivers._x = barycentre(x1+38, x2+38, t);
BTcvinfos._x = barycentre(x1+57, x2+57, t);

if(t >= 1) {
t = 1;
dt = 0;
delete this.onEnterFrame;
}
if(t <=0) {
t = 0;
dt = 0;
delete this.onEnterFrame;
}
}
}



}