Création de fonction - Je n'arrive pas [Résolu]

Messages postés
21
Date d'inscription
lundi 27 avril 2009
Statut
Membre
Dernière intervention
15 mars 2010
- - Dernière réponse : 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.
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
58
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
7 mai 2012
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Twinspirit
Messages postés
58
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
7 mai 2012
0
Merci
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
Commenter la réponse de Twinspirit
Messages postés
58
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
7 mai 2012
0
Merci
Oups,
desolé pour le code non balisé !



TwFlash - Développeur ActionScript3 freelance.
Mon blog : Twin Flash Blog
Commenter la réponse de Twinspirit
Messages postés
21
Date d'inscription
lundi 27 avril 2009
Statut
Membre
Dernière intervention
15 mars 2010
0
Merci
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 :)
Commenter la réponse de Kangouroops
Messages postés
21
Date d'inscription
lundi 27 avril 2009
Statut
Membre
Dernière intervention
15 mars 2010
0
Merci
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 !
Commenter la réponse de Kangouroops
Messages postés
58
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
7 mai 2012
0
Merci
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
Commenter la réponse de Twinspirit
Messages postés
21
Date d'inscription
lundi 27 avril 2009
Statut
Membre
Dernière intervention
15 mars 2010
0
Merci
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 ;)
Commenter la réponse de Kangouroops