IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Un terme n'est pas défini et n'a pas de propriété.


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut Un terme n'est pas défini et n'a pas de propriété.
    Bonjour à tous,

    derrière ce titre se cache un problème que j'ai en ce moment sur mon programme en as3. En fait à chaque fois que je teste mes booléens, j'ai cette erreur qui est levée. Donc en fait comment teste-t-on un booléen en AS3?

    Le code suivant est un extrait d'un jeu de mémoire devant nous permettre de jouer contre l'intelligence articielle (ici représenté par un tamagochi):

    memo.as:

    Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    protected var cardTab:Array = new Array("bomb", "box", "cloud", "flower", "leaf", "mushroom", "shell", "star",
    											"bomb", "box", "cloud", "flower", "leaf", "mushroom", "shell", "star"); // un tableau avec les "noms" de mes images
    private var tabCard:Array = new Array(); // un tableau qui contiendra mes cartes (card.as)
     
    private var tour:Boolean; /* ce jeu étant deux joueurs, un booleen suffit pour connaitre "à qui le tour"
    									0 -> Tamagotshi ; 1 -> Nous */	
     
    /* Mon constructeur */
    public function Memo() {
    	meltCard(); // on mélange les cartes dans le tableau
    	tour = false; // on fait jouer en premier le tamagochi
    	displayCard(); // on affiche
    }
     
    /* Ma méthode d'affichage sur la scène de mon jeu */
    public function displayCard() :void {
     
    	var margeY:int = 5;
    	var margeX:int = 5;
    	var compt:int = 0;
    	for (var i:int = 0; i < 4; i++) {
    		tabCard[i] = new Array;
    		for (var j:int = 0; j < 4; j++) {
    			tabCard[i][j] = new Card("images/card_"+cardTab[compt]+".png", this);
    			compt++;
    			tabCard[i][j].y = (i * Card.CARD_HEIGHT) + margeY;
    			tabCard[i][j].x = (j * Card.CARD_WIDTH) + margeX;
    			margeX += 5;
    			addChild(tabCard[i][j]);
    		}
    		margeY += 5;
    		margeX = 5;
    	}
    }
     
     
    /* méthode qui choisi au hasard une carte dans le paquet des cartes NON RETOURNEE */
    public function chooseCard() :void {
     
    	var random:Number = int(Math.random()*4);
    	var random2:Number = int(Math.random()*4);
    	for (var i:int = 0; i < random; i++) {
    		tabCard[i] = new Array;
    		for (var j:int = 0; j < random2; j++) {
                            // c'est ici que je teste si les la carte est retournée ou non, et c'est ici que j'ai l'erreur
    		        if (!tabCard[i][j].eteTrouvee()) {
    				tabCard[i][j].montrerFace();
    			} else {
    				chooseCard();
    			}
    		}
    	}	
    }

    card.as

    Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    public class Card extends Sprite
    	{
    			public static const CARD_HEIGHT:Number = 133;
    			public static const CARD_WIDTH:Number = 94;
    			private var image :Loader = new Loader ();
    			private var face :String;
    			private var addr_img :URLRequest;
    			private var memo:Memo;
    			private var resterSurFace:Boolean;
    			private var aEteTrouvee:Boolean;
     
    		public function Card(url:String, _memo:Memo) {
    			memo = _memo;
    			this.graphics.beginFill(0x000000);
    			this.graphics.drawRect(0, 0, CARD_WIDTH, CARD_HEIGHT);
    			this.graphics.endFill();
    			face = new String(url);
    			addr_img = new URLRequest("images/verso_playing_card.png");
    			image.load(addr_img);
    			addChild(image);
    			addEventListener(MouseEvent.CLICK, montrerFace);
    			aEteTrouvee = false;
    		}
     
    		public function setImage(new_img:URLRequest) :void {
     
    			image.load(new_img);
    		}
     
    		public function montrerFace(_e:Event) :void {
    			//trace(image.contentLoaderInfo.url.indexOf("images/verso_playing_card.png"));
    			addr_img = new URLRequest(face);
    			image.load(addr_img);
    			resterSurFace = true;
    		}
     
    		private function cacherFace() :void {
    			addr_img = new URLRequest("images/verso_playing_card.png");
    			image.load(addr_img);
    			resterSurFace = false;
    		}
     
    		public function recto() :String {
    			return face;
    		}
     
    		public function estResteSurFace() :Boolean {
    			return resterSurFace;
    		}
     
    		public function trouvee() :void {
    			aEteTrouvee = true;
    		}
     
    		public function eteTrouvee() :Boolean {
    			return aEteTrouvee;
    		}
    	}

    Donc mon problème se situe au niveau des vérifications de la valeur des booléens (erreur suivante: Un terme n'est pas défini et n'a pas de propriété.)
    J'ai cherché et trouvé que celà devait être que mon booléen n'est pas initialisé, pourtant dans le constructer card(), j'initialise bien la variable que je test (aEteTrouvee) à faux!

    Merci de votre aide.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    151
    Par défaut
    Bonjour,

    J'ai plus l'impression que c'est du fait que votre tableau est mal défini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabCard[i] = new Array;
    Si j'étais un interpréteur ou compilateur je ne comprendrai pas que c'est un tableau de cartes, donc par la suite, je ne serai pas qu'il y a une fonction eteTrouvee()
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut
    Je ne m'y connais que très peu en AS3, mais d'après mon prof les tableaux ne sont pas typés en AS3, donc d'après lui on peux y mettre n'importe quoi...

    A moins que ça ne soit cette ligne que tu n'ais pas vu:
    Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tabCard[i][j] = new Card("images/card_"+cardTab[compt]+".png", this);

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    151
    Par défaut
    Dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tabCard[i] = new Array;
    		for (var j:int = 0; j < random2; j++) {
                            // c'est ici que je teste si les la carte est retournée ou non, et c'est ici que j'ai l'erreur
    		        if (!tabCard[i][j].eteTrouvee()) {
    				tabCard[i][j].montrerFace();
    			} else {
    				chooseCard();
    			}
    		}
    Il n'y a pas le new, donc même si pas typé, le tableau ne contient pas de carte.
    En plus, le else récursif me dit qu'il risque d'y avoir un problème ...

    Bref, pas de new, dans ce tableau ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut
    Merci LittleWhite de tes remarques.

    Alors en effet il n'y a pas de new dans le code que tu me donnes mais ce tableau est un attribut privé de la classe, qui est alloué dans le constructeur de la classe Memo. Donc normalement il devrait déjà les contenir ces maudites cartes ^^

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    151
    Par défaut
    Sauf que la fonction écrase la case (du tableau) pour mettre un nouveau tableau (un tableau, qui n'a pas encore d'élément).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/06/2007, 17h22
  2. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  3. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  4. Réponses: 8
    Dernier message: 11/07/2006, 17h27
  5. [MySQL] Echange de valeurs dont le nombre n'est pas défini
    Par Diafwl dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/01/2006, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo