Création de fonction - Je n'arrive pas

Résolu
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010 - 26 oct. 2009 à 23:08
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010 - 28 oct. 2009 à 21:30
Bonjour,
Je travaille dans un document en AS3 et j'ai quelques soucis pour la création de fonction.
Il faut savoir que je débute, et donc mon soucis est surement que je m'y prends mal, et pas juste un petit truc qui manque.

Voici mon soucis:

function relacherCheveuxDroite(pEvt:Event):void {
if (sexe_homme){	
if  (homme.homme_cheveux.currentFrame==homme.homme_cheveux.totalFrames){
homme.homme_cheveux.gotoAndStop(1);
}
else {
homme.homme_cheveux.nextFrame();
}
}
else {
if  (femme.femme_cheveux.currentFrame==femme.femme_cheveux.totalFrames){
femme.femme_cheveux.gotoAndStop(1);
}
else {
femme.femme_cheveux.nextFrame();
}
}
}


Dans mon code, j'ai très souvent cette fonction qui revient à quelques détails près.
Les détails sont "Cheveux" et "cheveux", c'est à dire que je vais avoir exactement la même fonction où "Cheveux" et "cheveux" vont être remplacés par "Yeux" / "yeux", "Bouche" / "bouche", etc...

Du coup, j'ai essayé cela:

function droite("Partie", "partie"):void {
function relacher"Partie"Droite(pEvt:Event):void {
if (sexe_homme){	
if  (homme.homme_"partie".currentFrame==homme.homme_"partie".totalFrames){
homme.homme_"partie".gotoAndStop(1);
}
else {
homme.homme_"partie".nextFrame();
}
}
else {
if  (femme.femme_"partie".currentFrame==femme.femme_"partie".totalFrames){
femme.femme_"partie".gotoAndStop(1);
}
else {
femme.femme_"partie".nextFrame();
}
}
}
}

droite("Cheveux", "cheveux");


De telle sorte que chaque fois qu'il y ait écrit partie, ce soit lié au paramètre mis entre parenthèse... Mais apparemment ça ne fonctionne pas comme ça.
J'ai un peu farfouillé l'aide de flash, mais étant donné que je débute, pour le moment je ne suis parvenu à rien.

Si quelqu'un pouvait m'expliquer où je me trompe je lui en serait très reconnaissant afin que je puisse corriger mon code je lui en serai très reconnaissant.
Par avance je vous remercie.
Amaury.

7 réponses

Twinspirit Messages postés 58 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 7 mai 2012
27 oct. 2009 à 18:41
C'est que tu ne commences pas avec le plus facile !

Bon, tout d'abord, avec cette fonction :

function relacherCheveuxDroite(pEvt:Event):void {
droite(homme_cheveux, femme_cheveux);	
}


tu lances plutôt cette fonction :

function droite(clip:MovieClip, clip2:MovieClip):void {
var clipAffecte:MovieClip = clip;
var clipAffecte2:MovieClip = clip2;
if (sexe_homme){	
if  (homme.clipAffecte.currentFrame==homme.clipAffecte.totalFrames){
homme.clipAffecte.gotoAndStop(1);
}
else {
homme.clipAffecte.nextFrame();
}
}
else {
if  (femme.clipAffecte2.currentFrame==femme.clipAffecte2.totalFrames){
femme.clipAffecte2.gotoAndStop(1);
}
else {
femme.clipAffecte2.nextFrame();
}
}
}


Le code d'erreur

1120: Accès à la propriété non définie homme_cheveux.
1120: Accès à la propriété non définie femme_cheveux.


Signifie que les variables homme_cheveux et femme_cheveux ne sont pas déclarées.

D'aprés ton code, ces variables désignent un clip "homme_cheveux" imbriqué dans un clip "homme" et un clip "femme_cheveux" imbriqué dans un clip "femme". (ça me semble être ça, non ?).

Afin de pouvoir utiliser ces noms dans le code, il faut avoir effectué une liaison
- soit avec clic droit sur ton clip dans la bibliothèque -->liaison --> cocher exporter pour actionScript, ce qui devrait être fait avec tes clips homme et femme, sauf s'ils sont d'entree sur la scene.
- soit en nommant les clips.

Ici, c'est la seconde solution qui importe d'abord, je pense. Pour voir, double clique sur ton clip "homme" ou ton clip "femme". Ensuite, sélection ton clip "homme_cheveux" ou "femme_cheveux".

Un fois le clip sélectionné, en bas, dans le panneau propriété, à gauche, il y a un emplacement pour le Nom d'occurrence. Il doit contenir "homme_cheveux" pour le clip "homme" et "femme_cheveux" pour le clip "femme".

Mais cela ne va pas regler ton problème. Il te faut encore changer ceci

function relacherCheveuxDroite(pEvt:Event):void {
droite(homme_cheveux, femme_cheveux);	
}


car ici, tu appelles un MovieClip(homme-cheveux) placé sur la scene ! Or il ne l'es pas, il est dans le MovieClip(homme). Donc, la bonne façon d'appeler ta fonction est :

function relacherCheveuxDroite(pEvt:Event):void {
droite(homme.homme_cheveux, femme.femme_cheveux);}


Hum... Allez, courage, ça va marcher !

TwFlash - Développeur ActionScript3 freelance.
Mon blog : Twin Flash Blog
3
Twinspirit Messages postés 58 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 7 mai 2012
27 oct. 2009 à 06:59
Bon, tout d'abord, il ne faut pas imbriquer de functions l'une dans l'autre mais une après l'autre.

Ensuite, tu ne peux pas mettre de guillemets dans la déclaration de function. Par contre, tu peux déclarer une variable.

Dans ton système, je pense qu'il te faut déclarer un tableau contenant les différentes coiffures :

var coiffures:Array = [coiffe,relache,rase]

Puis tu classe tes images dans le même ordre (pour l'homme et la femme, tu fais pareil : image coiffee en frame 1, relache en frame 2, etc)

ensuite, tu basera tes comparaisons sur l'index du tableau :

//

function droite(clip:MovieClip, coiffure:String):void
{
var clipAffecte:MovieClip = clip;
//pour chaque valeur du tableau, on compare
for (var i:int=0;i<coiffures.length; i++)
{
//i+1 car les tableaux commencent à 0
if (coiffures[i+1] == coiffure)
{
//on se rend à l'image voulue
clipAffecte.gotoAndStop(i+1);
}
}
}

//On peut appeler la fonction sur femme ou homme

droite(homme.cheveux, relache);
droite(femme.cheveux, rase);

Je me demande si c'est ce que tu veux...


TwFlash - Développeur ActionScript3 freelance.
Mon blog : Twin Flash Blog
Mon site : www.twflash.fr
0
Twinspirit Messages postés 58 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 7 mai 2012
27 oct. 2009 à 07:01
Oups,
desolé pour le code non balisé !



TwFlash - Développeur ActionScript3 freelance.
Mon blog : Twin Flash Blog
0
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010
27 oct. 2009 à 10:56
Salut, et déjà un grand merci de t'intéresser à mon problème !

tout d'abord, il ne faut pas imbriquer de functions l'une dans l'autre mais une après l'autre

Roger, je vais le graver dans ma petite tête :)

Ensuite, tu ne peux pas mettre de guillemets dans la déclaration de function. Par contre, tu peux déclarer une variable.

Je croyais qu'avec les guillemets je déclarais une variable, huhu... Mais je crois que je commence à saisir comment on fait.


Dans ton système, je pense qu'il te faut déclarer un tableau contenant les différentes coiffures

En fait, je crois que je n'ai pas besoin de tableau, mais c'est parce que je me suis surement mal exprimé dans mon premier message.
J'ai déjà une fonction qui me permet de faire défiler mes frames pour faire défiler les coiffures.
En fait, ce que j'aimerai c'est que cette fonction soit définie avec 2 paramètres, ce qui me permettrait de l'appliquer aux Yeux, à la bouche, et à la tenue.
Je me suis inspiré du code que tu m'as proposé pour faire ça:

function droite(clip:MovieClip, clip2:MovieClip):void {
var clipAffecte:MovieClip = clip;
var clipAffecte2:MovieClip = clip2;
if (sexe_homme){	
if  (homme.clipAffecte.currentFrame==homme.clipAffecte.totalFrames){
homme.clipAffecte.gotoAndStop(1);
}
else {
homme.clipAffecte.nextFrame();
}
}
else {
if  (femme.clipAffecte2.currentFrame==femme.clipAffecte2.totalFrames){
femme.clipAffecte2.gotoAndStop(1);
}
else {
femme.clipAffecte2.nextFrame();
}
}
}


function relacherCheveuxDroite(pEvt:Event):void {
droite(homme_cheveux, femme_cheveux);	
}


Seulement je me retrouve avec ces deux erreurs:
[i]1120: Accès à la propriété non définie homme_cheveux.
1120: Accès à la propriété non définie femme_cheveux./i


Je ne comprends pas, je croyais pourtant m'être bien inspiré.
Auriez-vous une idée de quelle pourrait être mon erreur ?


L'idée c'est bien qu'en écrivant:

function relacherCheveuxDroite(pEvt:Event):void {
droite(homme_cheveux, femme_cheveux);	
}


Je lance cette fonction:

function relacherCheveuxDroite(pEvt:Event):void {
if (sexe_homme){	
if  (homme.homme_cheveux.currentFrame==homme.homme_cheveux.totalFrames){
homme.homme_cheveux.gotoAndStop(1);
}
else {
homme.homme_cheveux.nextFrame();
}
}
else {
if  (femme.femme_cheveux.currentFrame==femme.femme_cheveux.totalFrames){
femme.femme_cheveux.gotoAndStop(1);
}
else {
femme.femme_cheveux.nextFrame();
}
}
}


Dur dur de passer de l'autre côté de la barrière quand on est plutôt graphiste de formation.
Par avance, je vous remercie :)
0

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

Posez votre question
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010
27 oct. 2009 à 23:26
Salut !
Un énorme merci, j'ai pu faire marcher mon code grâce à toi.
C'est à dire en écrivant homme.homme_cheveux au lieu de homme_cheveux et en modifiant là où il fallait dans la fonction.
Du coup... ben merci beaucoup, ça va me raccourcir mon code !
0
Twinspirit Messages postés 58 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 7 mai 2012
27 oct. 2009 à 23:28
Très content d'avoir pu t'aider ;)
Ça vaut le coup de s'y mettre à l'as3, tu verras...

TwFlash - Développeur ActionScript3 freelance.
Mon blog : Twin Flash Blog
Mon site : TwFlash
0
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010
28 oct. 2009 à 21:30
Oui, j'imagine que ça vaut le coup, d'ailleurs, j'essaye doucement de m'y mettre.
Mais quand on est surtout du côté dessin, je dis surtout car j'ai 2h/semaine d'apprentissage de processing, ce n'est pas évident.
Heureusement, il y a des forums où l'on trouve des personnes prêtes à partager leur expérience ;)
0
Rejoignez-nous