Forums Développement Multimédia

Aller au contenu

début difficile en AS3

CODE Actionscript

20 réponses à ce sujet

#1 g.mescam

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 08 January 2009 - 21:25 PM

Bonjour,

J'essaye de me mettre doucement à l'AS3 avec un programme simple qui utilise une classe simple.
La classe s'appelle Toto et fait appel à la fonction affiche();
Le programme s'appelle HelloW et utilise la classe Toto pour afficher "toto".
Dans le programme au niveau des propriétés j'ai associé la classe Toto et les 2 fichiers sont dans le même répertoire
Les codes de la classe et du programme se trouvent ci dessous.

Problème
Quand je lance le programme j'ai le message d'erreur suivant (fenêtre Erreur de compilation) :

5000: La classe 'Toto' doit être une sous-classe de 'flash.display.MovieClip', puisqu'elle est liée à un symbole de bibliothèque du type correspondant.

J'ai essayé en modifiant la classe ( V code modifié de la classe ci dessous)et là j'ai l'erreur suivante ( fenêtre sortie):

Error: Error #2136: Le fichier SWF file:///C|/Flash/AS3/initAS3/HelloW.swf contient des données non valides.
        at Toto/frame1()

Code de la classe :

package
{
       
        public class Toto {
               
        public function affiche():void
        {
        trace ("toto");
        }
        }
}

Code programme HelloW

var monToto:Toto = new Toto();
monToto.affiche();

code modifié de la classe
package
{
        import flash.display.MovieClip;
        public class Toto extends MovieClip {
               
        public function affiche():void
        {
        trace ("toto");
        }
        }
}

J'ai sans doute fait une erreur vu que je ne maîtrise pas l'objet mais je ne vois pas.

Merci de m'aider à progresser

#2 Monz

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3541 messages

Posté 08 January 2009 - 21:51 PM

Bonsoir, et bienvenu sur ce forum,

Tu as des balises -as- pour poster ton code, c'est plus clair pour mes petits yeux, surtout à cette heure !

Sinon, tu dois, quand tu fais une classe, mettre un constructeur (même si flash le fera de lui-même, au début, il faut être rigoueux) :

[as]
package
{
import flash.display.MovieClip;
public class Toto extends MovieClip {

public function Toto():void
{
}

public function affiche():void
{
trace ("toto");
}
}
}[/as]

Ensuite, tu dois avoir autre chose dans ton code, qui génère ton erreur. Tu n'aurais pas attaché ta class Toto à un clip de ta bibliothèque, ou quelque chose ?

Modifié par Badwolf, 21 November 2012 - 11:06 AM.


#3 g.mescam

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 08 January 2009 - 23:34 PM

Je ne sais pas comment on fait pour asssocier une classe à un clip. Peut être sans faire exprès mais le code est simple et je n'ai aucun clip dans la bibliothèque. J'ai tiré le code de l'exemple "HelloWorld" du flash_as3_programming.pdf page 40/767(en le simplifiant encore plus parce que ça ne marchait pas)

Merci pour les conseils, je suis débutant en AS3 ( et en forum)


Citation (monz @ Jan 8 2009, 08:51 PM) Voir le message
Bonsoir, et bienvenu sur ce forum,

Tu as des balises -as- pour poster ton code, c'est plus clair pour mes petits yeux, surtout à cette heure !

Sinon, tu dois, quand tu fais une classe, mettre un constructeur (même si flash le fera de lui-même, au début, il faut être rigoueux) :

package
{
import flash.display.MovieClip;
public class Toto extends MovieClip {

public function Toto():void
{
}

public function affiche():void
{
trace ("toto");
}
}
}

Ensuite, tu dois avoir autre chose dans ton code, qui génère ton erreur. Tu n'aurais pas attaché ta class Toto à un clip de ta bibliothèque, ou quelque chose ?

#4 Monz

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3541 messages

Posté 09 January 2009 - 07:27 AM

Citation (sguitch44 @ Jan 8 2009, 11:34 PM) Voir le message
Je ne sais pas comment on fait pour asssocier une classe à un clip. Peut être sans faire exprès mais le code est simple et je n'ai aucun clip dans la bibliothèque. J'ai tiré le code de l'exemple "HelloWorld" du flash_as3_programming.pdf page 40/767(en le simplifiant encore plus parce que ça ne marchait pas)

Merci pour les conseils, je suis débutant en AS3 ( et en forum)


To fichier .as s'appelle bie Toto.as ? Il se trouve dans le même dossier que ton HelloW.fla ? Ca devrait marcher. Même en étendant pas la classe MovieClip.

Fais-nous passer le .fla si tu ne trouves pas ton erreur...

#5 g.mescam

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 09 January 2009 - 18:34 PM

Citation (monz @ Jan 9 2009, 06:27 AM) Voir le message
To fichier .as s'appelle bie Toto.as ? Il se trouve dans le même dossier que ton HelloW.fla ? Ca devrait marcher. Même en étendant pas la classe MovieClip.

Fais-nous passer le .fla si tu ne trouves pas ton erreur...


Dans le 1er message j'ai mis les codes classe Toto.as et programme HelloW.fla. ainsi que les erreurs générés. Tout est ds un même dossier. Revoici le code tout simple du Fla :

Code programme HelloW.fla

var monToto:Toto = new Toto();
monToto.affiche();
Je suis le cours AS3 que j'ai trouvé à l'adresse suivante :
http://help.adobe.com/fr_FR/ActionScript/3...programming.pdf
j'ai testé le programme "HelloWorld" qui utilise la classe Greeter. Voir Création application de base à la page 40/767 ---Saisir 31 dans la case. J'ai eu les erreurs cités ds le 1er message. Ensuite j'ai simplifié au maximum avec le programme HelloW et la classe Toto pour voir d'où venait l'erreur mais c'est pareil.
Si je coince là je suis bloqué pour la suite.

Merci pour ton aide

#6 Monz

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3541 messages

Posté 09 January 2009 - 20:25 PM

Citation (sguitch44 @ Jan 9 2009, 06:34 PM) Voir le message
Dans le 1er message j'ai mis les codes classe Toto.as et programme HelloW.fla. ainsi que les erreurs générés. Tout est ds un même dossier. Revoici le code tout simple du Fla :

Code programme HelloW.fla

Action Script

var monToto:Toto = new Toto();
monToto.affiche();
Je suis le cours AS3 que j'ai trouvé à l'adresse suivante :
http://help.adobe.com/fr_FR/ActionScript/3...programming.pdf
j'ai testé le programme "HelloWorld" qui utilise la classe Greeter. Voir Création application de base à la page 40/767 ---Saisir 31 dans la case. J'ai eu les erreurs cités ds le 1er message. Ensuite j'ai simplifié au maximum avec le programme HelloW et la classe Toto pour voir d'où venait l'erreur mais c'est pareil.
Si je coince là je suis bloqué pour la suite.

Merci pour ton aide


Je ne comprends pas ton pb. Cela devrait fonctionner.

Ta première classe (sans étendre MovieClip) est tout à fait viable. Vérifie que tu l'as bien mise dans un fichier .as (et non pas .fla) et que son nom correspond bien. Toto.as

Ensuite, refais un .fla, nouveau doc AS3, et mets sur la première frame, le code que tu nous as donné, sans rien touché d'autres. Enregistre ce .fla à côté de ton .as et compile. Tu ne dois pas avoir d'erreur.


#7 g.mescam

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 10 January 2009 - 12:04 PM

Citation (monz @ Jan 9 2009, 07:25 PM) Voir le message
Je ne comprends pas ton pb. Cela devrait fonctionner.

Ta première classe (sans étendre MovieClip) est tout à fait viable. Vérifie que tu l'as bien mise dans un fichier .as (et non pas .fla) et que son nom correspond bien. Toto.as

Ensuite, refais un .fla, nouveau doc AS3, et mets sur la première frame, le code que tu nous as donné, sans rien touché d'autres. Enregistre ce .fla à côté de ton .as et compile. Tu ne dois pas avoir d'erreur.


Bonjour Monz,

J'ai fait ce que tu m'as dit et voici les erreurs:

1180: Appel à une méthode qui ne semble pas définie, addFrameScript.
5000: La classe 'Toto' doit être une sous-classe de 'flash.display.MovieClip', puisqu'elle est liée à un symbole de bibliothèque du type correspondant.


Si t'as un peu de temps est ce que tu peux l'essayer en réel. Si ç'est OK pour toi je laisse tomber et je cherche du côté de mon installation.

Merci encore


#8 Monz

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3541 messages

Posté 10 January 2009 - 13:16 PM

Citation (sguitch44 @ Jan 10 2009, 12:04 PM) Voir le message
Bonjour Monz,

J'ai fait ce que tu m'as dit et voici les erreurs:

1180: Appel à une méthode qui ne semble pas définie, addFrameScript.
5000: La classe 'Toto' doit être une sous-classe de 'flash.display.MovieClip', puisqu'elle est liée à un symbole de bibliothèque du type correspondant.


Si t'as un peu de temps est ce que tu peux l'essayer en réel. Si ç'est OK pour toi je laisse tomber et je cherche du côté de mon installation.

Merci encore


Ces erreurs ne correspondent pas à ce que tu nous décrits. Si tu prends la classe Toto.as toute simple, plus les deux lignes de code que tu nous as donnés, tu ne peux pas avoir ces erreurs. Il y a autre chose. Peux-tu nous passer le .fla ?

#9 merabet.q

    Ceinture Blanche

  • Members
  • Pip
  • 4 messages

Posté 10 January 2009 - 15:13 PM

Citation (monz @ Jan 10 2009, 12:16 PM) Voir le message
Ces erreurs ne correspondent pas à ce que tu nous décrits. Si tu prends la classe Toto.as toute simple, plus les deux lignes de code que tu nous as donnés, tu ne peux pas avoir ces erreurs. Il y a autre chose. Peux-tu nous passer le .fla ?


Je crois que si, si je me souvient bien j'ai déjà eu le même problème à peu de chose près. Sur la frame 1 de ton .fla supprime (je dit bien supprime tout pas mettre en commentaire) le code. Ensuite, toujours dans ton .fla, sur Flash, tu modifies les paramètres de publication, sur l'onglet flash, à coté du langage script que tu as choisis (ici ActionScript 3.0 donc) tu clics sur "Paramètres..." Et dans classe du document tu met donc ta classe que tu veux lancer en premier, ici donc, tu rentrera "Toto". Voila, essaye ça déjà =P Moi c'est la méthode que j'utilise sur mon projet as3...(certe, c'est mon premier projet sur la version 3 de l'actionscript, mais bon xD)

#10 Monz

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3541 messages

Posté 10 January 2009 - 16:06 PM

Citation (Demosis @ Jan 10 2009, 03:13 PM) Voir le message
Je crois que si, si je me souvient bien j'ai déjà eu le même problème à peu de chose près. Sur la frame 1 de ton .fla supprime (je dit bien supprime tout pas mettre en commentaire) le code. Ensuite, toujours dans ton .fla, sur Flash, tu modifies les paramètres de publication, sur l'onglet flash, à coté du langage script que tu as choisis (ici ActionScript 3.0 donc) tu clics sur "Paramètres..." Et dans classe du document tu met donc ta classe que tu veux lancer en premier, ici donc, tu rentrera "Toto". Voila, essaye ça déjà =P Moi c'est la méthode que j'utilise sur mon projet as3...(certe, c'est mon premier projet sur la version 3 de l'actionscript, mais bon xD)


Je ne suis pas d'accord.

La classe Toto première version (celle présentée dans l'ouvrage) est tout à fait valide. Et ce n'est pas une classe de document puisqu'elle n'étend pas MovieClip et n'a aucune raison de le faire.

L'erreur vient d'ailleurs.

#11 g.mescam

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 11 January 2009 - 11:35 AM

Citation (monz @ Jan 10 2009, 03:06 PM) Voir le message
Je ne suis pas d'accord.

La classe Toto première version (celle présentée dans l'ouvrage) est tout à fait valide. Et ce n'est pas une classe de document puisqu'elle n'étend pas MovieClip et n'a aucune raison de le faire.

L'erreur vient d'ailleurs.


Suite au message de Demosis, j'ai modifié la classe pour que lorsqu'un programme vide l'appelle ( déclaration de la classe Toto dans la fenêtre propriétés) ça affiche un texte dans la fenêtre sortie. Donc le programme est vide et la classe est :

Action Script


package
{
import flash.display.*;

public class Toto extends MovieClip{


public function Toto():void
{
trace("Test du constructeur de Toto");
}

public function affiche() {
trace("Test de la méthode affiche ");
}
}
}
Et là ça fonctionne bien : Pas de message d'erreur et le texte "Test du constructeur de Toto" s'affiche bien dans la fenêtre de sortie.

Si je modifie le programme .fla en ajoutant simplement l'unique ligne suivante

Action Script


var monToto = new Toto();
Dans la fenêtre de sortie j'ai le message :


Test du constructeur de Toto
Error: Error #2136: Le fichier SWF file:///C|/Flash/AS3/initAS3/HelloW.swf contient des données non valides.
at Toto/frame1()


Quand j'utilise la classe avec le programme vide c'est bon. Quand je créé une occurence de la classe Toto ça se passe mal.

Autre constatation :

le .fla est vide, Si je modifie la déclaration de la classe :

Action Script


public class Toto {
J'ai le message d'erreur :

5000: La classe 'Toto' doit être une sous-classe de 'flash.display.MovieClip', puisqu'elle est liée à un symbole de bibliothèque du type correspondant.

Il faut donc absolument déclarer Toto comme une extension de la classe MovieClip ? ?

D'autre part la ligne suivante est indispensable :

Action Script


import flash.display.*;
Si je la supprime, tout en déclarant la classe comme au début et avec le .fla vide j'ai les erreurs suivantes dans la fenêtre de compilation


1017: La définition de la classe de base MovieClip est introuvable.
5000: La classe 'Toto' doit être une sous-classe de 'flash.display.MovieClip', puisqu'elle est liée à un symbole de bibliothèque du type correspondant.

Si vous pouvez me dire comment on créé une instance d'une classe (avec un exemple simple d'une classe et un .fla)

Merci à tous

#12 çayjb

    dadaaaa

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 2770 messages

Posté 11 January 2009 - 13:53 PM

Comme Monz je suis certains qu'il y a autre chose dont tu ne t'aperçois pas. (ça arrive à tout le monde icon_razz.gif)

Voila un exemple ultra basique qui fonctionne. (je n'ai changer aucune propriété du .fla, j'ai juste tapé le code et enregistré)

Fichier(s) joint(s)

  • Fichier joint  test.fla   21 Ko   40 téléchargement(s)
  • Fichier joint  ClassTest.as   120 octets   36 téléchargement(s)

Modifié par çayjb, 11 January 2009 - 13:56 PM.


#13 merabet.q

    Ceinture Blanche

  • Members
  • Pip
  • 4 messages

Posté 11 January 2009 - 14:02 PM

Tous ce que je sais c'est qu'avec ma méthode, en modifiant la propriété de publication de ton .fla, tu ne dois vraiment rien mettre comme code, même un commentaire ça génère une erreur de compilation...

#14 çayjb

    dadaaaa

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 2770 messages

Posté 11 January 2009 - 14:35 PM

Demosis perso je préfère aussi utiliser la classe de document et tout coder en classes mais avant c'est tout de même bien de savoir faire, et surtout comprendre, les bases.

#15 g.mescam

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 11 January 2009 - 18:11 PM

Citation (çayjb @ Jan 11 2009, 01:35 PM) Voir le message
Demosis perso je préfère aussi utiliser la classe de document et tout coder en classes mais avant c'est tout de même bien de savoir faire, et surtout comprendre, les bases.


J'ai essayé ton programme test.fla la classe TestClass.as et ça fonctionne. Je viens de comprendre mon erreur. Si j'ai bien compris on indique dans la propriété de document le nom de la classe quand elle est autonome mais quand on créé une instance de la classe (comme dans le programme test.fla) on ne met surtout pas le nom de cette classe dans la propriété de document.

Merci à vous, je vais pouvoir poursuivre mon apprentissage de l'AS3 icon_razz.gif

#16 sopsomer

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 13 February 2009 - 15:34 PM

Citation (sguitch44 @ Jan 8 2009, 10:25 PM) Voir le message
Bonjour,

J'essaye de me mettre doucement à l'AS3 avec un programme simple qui utilise une classe simple.
La classe s'appelle Toto et fait appel à la fonction affiche();
Le programme s'appelle HelloW et utilise la classe Toto pour afficher "toto".
Dans le programme au niveau des propriétés j'ai associé la classe Toto et les 2 fichiers sont dans le même répertoire
Les codes de la classe et du programme se trouvent ci dessous.

Problème
Quand je lance le programme j'ai le message d'erreur suivant (fenêtre Erreur de compilation) :

5000: La classe 'Toto' doit être une sous-classe de 'flash.display.MovieClip', puisqu'elle est liée à un symbole de bibliothèque du type correspondant.

J'ai essayé en modifiant la classe ( V code modifié de la classe ci dessous)et là j'ai l'erreur suivante ( fenêtre sortie):

Error: Error #2136: Le fichier SWF file:///C|/Flash/AS3/initAS3/HelloW.swf contient des données non valides.
at Toto/frame1()


Code de la classe :

package
{

public class Toto {

public function affiche():void
{
trace ("toto");
}
}
}


Code programme HelloW

var monToto:Toto = new Toto();
monToto.affiche();


code modifié de la classe
package
{
import flash.display.MovieClip;
public class Toto extends MovieClip {

public function affiche():void
{
trace ("toto");
}
}
}


J'ai sans doute fait une erreur vu que je ne maîtrise pas l'objet mais je ne vois pas.

Merci de m'aider à progresser


Salut !

Déjà il te faut un constructeur dans ta classe. Le constructeur c'est une fonction portant le même nom que ta classe, en général tu t'en sert pour initialiser ton objet.

Voilà!


#17 sopsomer

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 13 February 2009 - 15:36 PM

Salut !

Déjà il te faut un constructeur dans ta classe. Le constructeur est une fonction (public) ayant le même nom que ta classe. Il permet en général d'initialiser ton objet.

Voilà! En espérant t'avoir aidé...un peu

#18 goabonga

  • Guests

Posté 13 February 2009 - 16:52 PM

Citation (sebizarre @ Feb 13 2009, 02:36 PM) Voir le message
Salut !

Déjà il te faut un constructeur dans ta classe. Le constructeur est une fonction (public) ayant le même nom que ta classe. Il permet en général d'initialiser ton objet.

Voilà! En espérant t'avoir aidé...un peu


public ??? peu etre internal !

#19 lalary

    Ceinture Blanche

  • Members
  • Pip
  • 1 messages

Posté 28 March 2009 - 18:46 PM

Salut,

Moi aussi je débute sur Flash et j'ai deux erreurs en exécutant "Test.fla" :
1° - 1180: Appel à une méthode qui ne semble pas définie, addFrameScript.
2° - 5000: La classe 'ClassTest' doit-être une sous classe de 'flash.display.MovieClip' puisqu'elle est liée à un symbole de bibliothèque du type correspondant.


Merci d'éclairer ma lanterne gourou.gif J'aimerais vraiment bien sortir un truc en flash et là çà me p... les c...... de pas pouvoir exécuter un exemple basique.


#20 jesanchez

    Ceinture Blanche

  • Members
  • Pip
  • 1 messages

Posté 21 November 2012 - 09:18 AM

Salut Lalary.

La solution l'a donné l'utilisateur Çayjb. Regarde les deux fichiers jointés. Ils marchent très bien. J'ai eu le même problème, c'est que dans la propriété du stage, il est attaché la class du fichier .as. Moi j'ai enlevé l'attachement du class et voilà!. Ça a marché :D. Peut-être est un appelle redondante à la même class. Et j'imagine que dans la construction du fichier swt, dans l'exécution il y a un conflit pour amener les bonnes données. :).

Merci a tous encore.

#21 Badwolf

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 667 messages

Posté 21 November 2012 - 11:07 AM

3 ans après :mrgreen:
Haoooooooooooooooooooooooooooooooooooooooooooooou !!!



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