Forums Développement Multimédia

Aller au contenu

Problème de syntaxte

CODE Actionscript

17 réponses à ce sujet

#1 Gaïa

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 85 messages

Posté 25 May 2013 - 12:42 PM

Bonjour,
lorsque je publi ce code j'ai ces erreurs de syntaxte:


ligne 18 1084: Erreur de syntaxe : rightparen est attendu devant back_mc.

ligne 27 1084: Erreur de syntaxe : rightparen est attendu devant semicolon.

Je suppose que je dois confondre les accolades et les parenthèses quelques part dans le script,
mais malgré avoir essayé plusieurs choses j'ai toujours ces erreurs.
Quelqu'un pourrait il m'aider ?

Voici le code :

function init()
{
stage.align=StageAlign.TOP_LEFT;
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE,updateSize);
stage.dispatchEvent(new Event(Event.RESIZE));
}
init();
function updateSize(e:Event)
(

resizeMe(back_mc.stage.stageWidth)
//center movie clip
back_mc.x = (stage.stageWidth- back_mc.width)/2;
back_mc.y = (stage.stageHeight- back_mc.height)/2;
// set title bar
titlebar_mc.x=0;
titlebar_mc.y=0;
// set menu
if (stage.stageWidth== 450) (
menu_mc.x = (stage.stageWidth-menu_mc.width)-((stage.stageHeight/100)*5);
menu_mc.y = (stage.stageHeight/100)*20);
)
else(
  menu_mc.x = (stage.stageWidth-menu_mc.width)/2;
  menu_mc.y = (stage.stageHeight/100)*10;
  )
)
function resizeMe (mc:MovieClip, maxH:Number, maxW:Number=0, constrainProportions:Boolean=true);
maxH = maxW==0 ? maxH : maxW;
mc.width = maxW;
mc.height = maxH;
if (constrainProportions) (
                mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
        )
)

Vive le graphisme qui bouge tout seul ( enfin presque) !!!

#2 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 25 May 2013 - 13:19 PM

Bonjour,
Je n'ai pas lu attentivement ligne par ligne, mais déjà je vois:
function updateSize(e:Event)
(
avec une parenthèse au lieu d'une accolade:
function updateSize(e:Event)
{

[Edit]
Oh je viens de voir plusieurs autres endroits où tu fais l'erreur.
Les blocs d'instructions doivent être délimités par des accolades, pas des parenthèses:

function truc() {
        // ce code est à mettre entre accolades
}

if (condition) {
        // ce code est à mettre entre accolades
}
 

http://www.adobe.com...umberedheader_2

#3 Gaïa

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 85 messages

Posté 25 May 2013 - 19:04 PM

Haaa merci !

cependant il me reste une erreur sur ce bout de code il me semble:


ligne 22 : if (stage.stageWidth== 450) {
ligne 23 : menu_mc.x = (stage.stageWidth-menu_mc.width)-((stage.stageHeight/100)*5);
ligne 24 : menu_mc.y = (stage.stageHeight/100)*20)
ligne 25: };

A la publication j'ai comme erreur:

Séquence 1, Calque 'action', Image 1, ligne 24 1086: Erreur de syntaxe : un point-virgule est attendu avant rightparen.

Mais lorsque j'ajoute ce point-virgule flash génère 5 erreurs de plus a la publication.
La syntaxe est-elle correctement écrite pour cet morceau de code ou cette erreur peut venir d'ailleurs ?
Merci...
Vive le graphisme qui bouge tout seul ( enfin presque) !!!

#4 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6999 messages

Posté 25 May 2013 - 20:37 PM

Salut,

Compte le nombre de parenthèses de cette ligne :

menu_mc.y = (stage.stageHeight/100)*20)


#5 Gaïa

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 85 messages

Posté 26 May 2013 - 07:28 AM

Salut,
ha oui merci !
Mais a chaque fois que je corrige une erreur ça en génère un autre ! c'est vexant !!!


function resizeMe (mc:MovieClip, maxH:Number, maxW:Number=0, constrainProportions:Boolean=true);
maxH = maxW==0 ? maxH : maxW;
mc.width = maxW;
mc.height = maxH;
if (constrainProportions) {
                mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
}

Erreur:

Séquence 1, Calque 'action', Image 1, ligne 36 1126: La fonction ne comporte pas d'élément body.

Et la j'ai beau chercher, ça coince...
Ca veut dire quoi ce message d'erreur ?

Merci.

Modifié par Krevare, 26 May 2013 - 19:55 PM.
Ajout des balises de code

Vive le graphisme qui bouge tout seul ( enfin presque) !!!

#6 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 26 May 2013 - 08:18 AM

Voir le messageinfos, le 26 May 2013 - 07:28 AM, dit :

Mais a chaque fois que je corrige une erreur ça en génère un autre ! c'est vexant !!!
Non faut pas ! :)
Ceci dit, tu as peut-être raté une étape dans ton apprentissage, on dirait qu'il te manque les rudiments de la syntaxe en actionscript. Avant, dans l'aide d'Adobe il y avait une rubrique qui expliquait tout ça mais je ne la retrouve plus depuis qu'ils ont changé l'organisation de leur site. Mais il doit bien y avoir un document qui explique le B.A.BA de comment écrire correctement le code.

Bref. Ce message d'erreur carrément confus et mal traduit parle d'un certain body. Corps en français. Eh oui, il manque le corps de la fonction resizeMe ! Qu'est-ce que le corps d'une fonction ? C'est le code entre accolades qui suit l'entête, ou déclaration de la fonction. Il te faut faire :
function resizeMe (mc:MovieClip, maxH:Number, maxW:Number=0, constrainProportions:Boolean=true){
        maxH = maxW==0 ? maxH : maxW;
        // etc...
}
 

Et tant que j'y suis, je te conseillerais, au stade où tu en est, de te méfier de l'opérateur ternaire :
maxH = maxW==0 ? maxH : maxW;
Je pense qu'il vaut mieux débuter tranquillement avec le code plus lisible et qui revient au même:
if ( maxW == 0 ) {
        maxH = maxH;
} else {
        maxH = maxW;
}
 

Code qui peut aussi s'écrire sans accolades car il n'y a qu'une instruction dans chaque bloc (ie code regroupé entre 2 accolades):
if ( maxW == 0 )  maxH = maxH;
else maxH = maxW;
 

Et d'ailleurs, comme maxH = maxH n'avance pas à grand chose ça devient simplement :
if ( maxW != 0 )  maxH = maxW;

...... et à propos, en me relisant je m'attarde un peu sur la signification du code et me demande si ce ne devrait pas plutôt être
if ( maxW == 0 )  maxW = maxH;


#7 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 26 May 2013 - 08:31 AM

P.S: Même chose pour
mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
En général on écrit:
if ( mc.scaleX < mc.scaleY ) mc.scaleY = mc.scaleX;
else mc.scaleX = mc.scaleY;
avec ou sans les accolades, ça dépend des goûts.

#8 Gaïa

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 85 messages

Posté 26 May 2013 - 10:05 AM

En effet il me manque des rudiments, j'ai du mal a comprendre le concept !
j'ai corriger comme ça:

function resizeMe (mc:MovieClip, maxH:Number, maxW:Number=0, constrainProportions:Boolean=true){

if ( mc.maxW == 0 ) {
                mc.maxH = maxH;
} else {
                mc.maxH = maxW;
}

if (constrainProportions) {
                ( mc.scaleX < mc.scaleY ) mc.scaleY = mc.scaleX;
else mc.scaleX = mc.scaleY;
}

mais ça ne fonctionne toujours pas. c'est encore mal écris ?
Merci

Modifié par Krevare, 26 May 2013 - 19:55 PM.
Ajout des balises de code

Vive le graphisme qui bouge tout seul ( enfin presque) !!!

#9 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6999 messages

Posté 26 May 2013 - 10:30 AM

Citation

Mais il doit bien y avoir un document qui explique le B.A.BA de comment écrire correctement le code.

Il y a toujours ça :

http://forums.mediab.../as3premierspas
http://forums.mediab.../as3pourlesnuls
http://forums.mediab...latform/debuter

Citation

Ceci dit, tu as peut-être raté une étape dans ton apprentissage, on dirait qu'il te manque les rudiments de la syntaxe en actionscript.

+1

Citation

En effet il me manque des rudiments, j'ai du mal a comprendre le concept !

Sans comprendre la base il est difficile d'essayer d'écrire un code, il est donc recommandé de commencer par écrire ton code à la main et en français pour déjà maîtriser ce que tu veux faire ligne par ligne (peu importe le code que tu voudra utiliser après). Une fois que tu sais où tu veux aller, tu traduit ce que tu as écrit en français dans la version du code qui t'intéresse (ici AS3) mais pour cela il te faut les bases de la syntaxe, sinon à chaque nouvelle ligne tu va tomber sur des erreurs que tu ne comprend pas et qu'il est difficile pour nous de t'expliquer si tu n'as pas les bases pour comprendre pourquoi il faut faire de telle ou telle manière.

Bon courage ;-)

#10 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 26 May 2013 - 11:03 AM

if (constrainProportions)
{
   ( mc.scaleX < mc.scaleY ) mc.scaleY = mc.scaleX;
   else mc.scaleX = mc.scaleY;
}
 

Cette condition if est mal rédigé ... je pense qu'il manque un if dans dans if.
Je ne suis pas sûr de ce que tu veux faire, mais essayes comme ça :

if (constrainProportions)
{
   if ( mc.scaleX < mc.scaleY ) mc.scaleY = mc.scaleX;
   else mc.scaleX = mc.scaleY;
}
 

Dans tous les cas, j'abonde Mr Spi et Lilive, essayes de reprendre les bases avant toute chose ...
Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source

#11 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 26 May 2013 - 11:14 AM

Voir le messagelilive, le 26 May 2013 - 08:18 AM, dit :

Avant, dans l'aide d'Adobe il y avait une rubrique qui expliquait tout ça mais je ne la retrouve plus depuis qu'ils ont changé l'organisation de leur site. Mais il doit bien y avoir un document qui explique le B.A.BA de comment écrire correctement le code.

Voir le messageMonsieur Spi, le 26 May 2013 - 10:30 AM, dit :

Oui, excellent tutoriel qui de plus contient le lien que je n'arrivais pas à retrouver: http://help.adobe.co...earn/index.html
Notamment, pour la syntaxe: http://help.adobe.co...6fc9b-8000.html

#12 Gaïa

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 85 messages

Posté 27 May 2013 - 11:20 AM

Bonjour,
merci pour toutes ces infos et vos corrections, que j'ai lu et qui m'ont aidé a résoudre ( en partie ) mes erreurs.
Oui mais voila... après avoir retourner ce code dans tous les sens et bu 3 litres de café,
je n'ai toujours pas réussi a faire fonctionner ce code correctement !
je suis super vexé et je donne ma langue au chat !

Est ce que quelqu'un peu regarder le .fla pour m'expliquer ce qui se passe et éventuellement le débugger ?

En fait dans ce code je souhaite que l'image se redimmenssionne
sans déformations en fonction de la taille de la page html.

_Que le "menu" reste "caler" à droite MAIS SANS REDIMMENSSIONNEMENT,
( sauf que pour le moment il se réduit comme l'image et je ne veux pas )

_Que le "titre" reste "caler" en haut SANS REDIMMENSSIONNEMENT.

Bref, suis-je encore loin de la vérité !?

Merci pour votre aide.

Fichier(s) joint(s)


Vive le graphisme qui bouge tout seul ( enfin presque) !!!

#13 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6999 messages

Posté 27 May 2013 - 12:37 PM

Salut,

Je viens de lire ton code et il y a quelques soucis.

Premièrement il faut indenter ton code si tu veux t'y retrouver, c'est à dire aligner correctement les lignes et faire bien attention aux ouvertures et fermetures de parenthèses, accolades, etc... L'Actionscript est un langage, ce qui veut dire que celui qui souhaite écrire dans ce langage doit respecter la ponctuation et les règles grammaticales.

Un exemple en Français :

Citation

"On bute Thierry !"

N'a rien à voir avec :

Citation

"On bute, Thierry !"

Une simple virgule fait toute la différence et pourtant ce sont les mêmes mots. C'est pourquoi tu va te prendre la tête à n'en plus finir si tu ne passe pas par une étape où tu apprend les rudiments du langage que tu souhaite utiliser, notamment ses règles syntaxiques.

Voici ton code corrigé, nettoyé et indenté correctement :


var W:Number = stage.stageWidth; // largeur d'origine de la scène
var H:Number = stage.stageHeight; // hauteur d'origine de la scène

init();

function init(){
        stage.align = StageAlign.TOP_LEFT; // aligne la scène en haut à gauche
        stage.scaleMode = StageScaleMode.NO_SCALE; // interdit le changement d'échelle
        stage.addEventListener(Event.RESIZE,updateSize); // écoute le redimentionnement
        updateSize(null); // lance une première fois le redimentionnement
}

// adapter les éléments de la scène
function updateSize(e:Event){
       
        W = stage.stageWidth;  // nouvelle largeur
        H = stage.stageHeight; // nouvelle hauteur
       
        /* algorithme des modifs du fond
                si largeur du fond < largeur scène
                        largeur fond = largeur scène
                        adapte la hauteur
                sinon si hauteur du fond < hauteur scène
                        hauteur fond = hauteur scène
                        adapte la largeur
        */

       
        // adapter la taille du fond à la taille de la scène
        if( back_mc.width<W) {                                                 
                back_mc.width = W;     
                back_mc.scaleY = back_mc.scaleX;
        } else if ( back_mc.height<H){
                back_mc.height = H;
                back_mc.scaleX = back_mc.scaleY;
        }
               
        // center le fond sur la scène
        back_mc.x = W/2;
        back_mc.y = H/2;

        // position de la barre de titre
        titlebar_mc.x = titlebar_mc.width/2;
        titlebar_mc.y = titlebar_mc.height/2;

        // position du menu
        menu_mc.x = W - menu_mc.width;
        menu_mc.y = H - menu_mc.height;
}
 

Comme tu peux le constater, les accolades servent à entourer des blocs d'instructions, les parenthèses servent à entourer des paramètres ou des formules (comme en maths), les points virgules terminent les "phrases", etc....

Ensuite tu dois apprendre à lire ton code comme si c'était ta langue maternelle, autrement dit tu dois pouvoir traduire des blocs comme :

if ( mc.scaleX < mc.scaleY ) {
         mc.scaleY = mc.scaleX;
} else {
        mc.scaleX = mc.scaleY;
}

Ecrit en français ça donne :

Si (l'échelle sur X de mon movieclip "mc" est inférieure à l'échelle sur Y de mon monvieclip "mc") {
        l'échelle sur Y de mon movieclip "mc" est égale à l'échelle sur X de mon movieclip "mc"
} sinon {
        l'échelle sur X de mon movieClip "mc" est égale à l'échelle sur Y de mon movieClip "mc"
}

Que l'on peut simplifier par :

Citation

Si (l'échelle sur X de "mc" est inférieure à son échelle sur Y) son échelle sur Y est égale à son échelle sur X, sinon son échelle sur X est égale à son échelle sur Y.

Ce sont de simples phrases qui sont traduites en code, normalement on fait l'inverse, c'est à dire qu'on commence à écrire son programme en Français pour voir si tout est bien logique (ça s'appelle l’algorithmique), et quand on est sûr que tout est ok on traduit dans le langage de programmation souhaité.

Techniquement tu devrais être en mesure de traduire TOUT ton code ligne par ligne si tu veux maîtriser ce qu'il fait et ne pas t’emmêler les pinceaux. En faisant ça tu aurais vu que le code que tu essayais de reprendre ne pouvait pas faire ce que tu souhaite et qu'il fallait le modifier radicalement, puisque tu demande une mise à l'échelle du fond mais sans jamais en changer la taille.

Ensuite, tu conserve des commentaires en anglais, alors que visiblement tu écris en français, c'est pas top pour comprendre ce que tu es en train de faire, commence donc par traduire les instructions en anglais. Puis réfléchis à ce que tu veux faire, je t'ai mis un exemple en commentaire dans le code pour voir comment écrire en français ce que tu souhaite avant de le faire en code.

Pour finir, tu dois faire attention au points de repère de position de tes clips, là il est au centre, ce qui veut dire que tous les calculs sont faits par rapport au centre de ces clips et non leur point haut gauche comme cela se fait normalement, du coup là aussi il faut modifier les calculs.

Remplace ton code par le mien et teste, ça devrait marcher, je met mon résultat en pièce jointe (à télécharger pour tester le resize) mais à toi de refaire ton FLA en guise d'exercice.

Fichier(s) joint(s)



#14 Gaïa

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 85 messages

Posté 27 May 2013 - 17:22 PM

Merci Maître Spi pour ces explications qui je dois dire éclaire un peu plus ma lanterne.
Je vais refaire le .fla pour m'exercer avant d'attaquer le menu et ses boutons.

Mais j'ai encore une question :
En dehors du fait que les règles de syntaxte du script initial était nulle et vous aient fait pleurer de rire,
le fait qu'il n'y avait pas de variable a t-il joué un rôle dans le fait que le script ne fonctionnait pas ou il est possible de s'en passer ?
Merci.
Vive le graphisme qui bouge tout seul ( enfin presque) !!!

#15 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6999 messages

Posté 27 May 2013 - 18:15 PM

Citation

En dehors du fait que les règles de syntaxte du script initial était nulle et vous aient fait pleurer de rire,

Le script initial n'était pas mauvais, il avait juste mal été recopié et surtout ne correspondait pas à ce que tu voulais faire (et ça ne me fait pas pleurer de rire).

Citation

le fait qu'il n'y avait pas de variable a t-il joué un rôle dans le fait que le script ne fonctionnait pas ou il est possible de s'en passer ?

Il n'y a pas de rapport, le script ne fonctionnait pas car tu ne sait pas écrire un code tout simplement, ce n'est pas une critique, juste une constatation. Pourquoi veux-tu te passer des variables ? Sais-tu à quoi elles servent ? Les variables sont la base de tout programme informatique, essayer de s'en passer ce serait comme essayer de se passer des lettres de l'alphabet pour écrire un roman...

Comme le dit Lilive :

Voir le messagelilive, le 26 May 2013 - 08:18 AM, dit :

Ceci dit, tu as peut-être raté une étape dans ton apprentissage, on dirait qu'il te manque les rudiments de la syntaxe en actionscript.

J'irai plus loin en disant que tu ne semble pas du tout avoir commencé ton apprentissage... A mon avis il faudrait commencer par le début et ne pas mettre la charrue avant les bœufs, commence par apprendre la base de rédaction d'un code et l'apprentissage d'un langage (pourquoi pas Actionscript), puis tu pourras t'attaquer à créer un programme qui fait ce que tu veux, ou à en modifier un à ta convenance...

Lis ce bouquin pour commencer : http://pratiqueactio...ion%200.1.4.zip

Ensuite lis les conseils donnés ici : http://forums.mediab.../as3premierspas

Bon courage.

#16 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 27 May 2013 - 18:51 PM

Voir le messageMonsieur Spi, le 27 May 2013 - 18:15 PM, dit :

Lis ce bouquin pour commencer : http://pratiqueactio...ion%200.1.4.zip
Ensuite lis les conseils donnés ici : http://forums.mediab.../as3premierspas
Ou dans l'ordre inverse, car Pratique d'AS3 peut être un peu rude, selon ton niveau.
Moi non plus je n'ai pas rigolé à lire ton code, faut bien commencer quelque part et personne n'a la science infuse ! (je crois, en tout cas moi, ben je l'avais pas non plus :mrgreen: !)

#17 Gaïa

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 85 messages

Posté 28 May 2013 - 14:09 PM

Bonjour,
Hoo chouette un peu de lecture.
ça à l'air aussi passionnant que le code civil !
Je ne vais pas tout comprendre je crois...
:oops:
Merci à vous.
Vive le graphisme qui bouge tout seul ( enfin presque) !!!

#18 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 28 May 2013 - 21:57 PM

Voir le messageinfos, le 28 May 2013 - 14:09 PM, dit :

ça à l'air aussi passionnant que le code civil !
Je ne vais pas tout comprendre je crois...
Dans ce cas commence par http://forums.mediab.../as3premierspas qui est conçu pour accompagner ceux qui partent de 0 en programmation.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP