Forums Développement Multimédia

Aller au contenu

getDefinitionByName error 1065

CODE Actionscript

4 réponses à ce sujet

#1 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 15 August 2013 - 12:02 PM

Bonjour,

Ci-dessous un bout de code qui me pose problème avec getDefinitionByName :
Error #1065: Variable Carte00 is not defined.
Je ne sais pas par quel bout traiter ce souci. Est-ce la balise embed qui pose problème ?

Merci d'avance pour vos éclairages ...

package
{
   import flash.utils.getDefinitionByName;

   public class Main extends Sprite
   {
          [Embed(source = "../lib/00.jpg")] private const Carte00:Class;
          [Embed(source = "../lib/01.jpg")] private const Carte01:Class;
          [Embed(source = "../lib/02.jpg")] private const Carte02:Class;
          //etc.

          public function Main():void
          {
                 for ( var i:int = 0 ; i < 4 ; i++ )
                 {
                        for ( var j:int = 0 ; j < 8 ; j++ )
                        {
                                var ClasseCarte:Class = getDefinitionByName ( "Carte" + i + j ) as Class;
                                var illustration:Bitmap = new ClasseCarte();
                        }
                 }
          }
   }
}

Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source

#2 darkrat

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 61 messages

Posté 15 August 2013 - 13:59 PM

d'après l'erreur il parle de variable, hors tu utilises des constantes, je n'ai pas encore utilisé cette fonction mais si tu transformes tes constantes en variables ca ne marche pas?

regarde ici il y a peut être ce qu'il te faut : http://forums.mediab...yname-et-embed/

#3 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6954 messages

Posté 15 August 2013 - 16:53 PM

Salut,

C'est un problème de nom de classe, vire tes boucles et fait un trace sur "Carte00", il va te sortir : [class Main_Carte00]
Pour régler le problème modifie le nom de la classe que tu cherche à atteindre, ceci devrait marcher :

package
{
   import flash.utils.getDefinitionByName;

   public class Main extends Sprite
   {
                  [Embed(source = "../lib/00.jpg")] private const Carte00:Class;
                  [Embed(source = "../lib/01.jpg")] private const Carte01:Class;
                  [Embed(source = "../lib/02.jpg")] private const Carte02:Class;
                  //etc.

                  public function Main():void
                  {
                                 for ( var i:int = 0 ; i < 4 ; i++ )
                                 {
                                            for ( var j:int = 0 ; j < 8 ; j++ )
                                            {
                                                            var ClasseCarte:Class = getDefinitionByName ( "Main_Carte" + i + j ) as Class;
                                                            var illustration:Bitmap = new ClasseCarte();
                                            }
                                 }
                  }
   }
}


#4 Nelchaël

  • Members
  • PipPipPipPipPipPipPipPip
  • 1900 messages

Posté 15 August 2013 - 17:26 PM

Comme le dit Monsieur Spi, il faut un vrai nom de classe et non celui d'une référence à la classe.
Par contre, pourquoi ne pas faire directement :
var ClasseCarte:Class=this["Carte"+i+j];

nelchael.fr freelance flash CS6

#5 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 15 August 2013 - 18:49 PM

Voir le messagedarkrat, le 15 August 2013 - 13:59 PM, dit :

si tu transformes tes constantes en variables ca ne marche pas
Une constante est avant tout une variable (un peu comme si const étendait var), const permet juste de signifier au compileur que cette variable ne variera pas :blink:

Voir le messageMonsieur Spi, le 15 August 2013 - 16:53 PM, dit :

il va te sortir : [class Main_Carte00]
Je n'avais jamais percuté sur ce détail ... ça fonctionne !

Voir le messageNelchaël, le 15 August 2013 - 17:26 PM, dit :

var ClasseCarte:Class=this["Carte"+i+j];
Je ne connaissais pas cette syntaxe, plus simple encore ! et cela m'évite de faire l'import du getChildByName ...

Merci à tous les trois pour vos réponses.
Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source



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