Probleme avec classe étendue et getChildByName

sprullex Messages postés 3 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juillet 2009 - 30 juil. 2009 à 20:09
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 - 30 juil. 2009 à 21:00
bonjour/bonsoir

j'ai d'abord créé un movieClip que j'ai nommé carre. Je l'ai exporté en AS3.
j'ai déclaré une classe carreDiagonale héritée du movieClip carre. Et j'ai donc rajouté une méthode publique pour qu'a chaque appel, le x et le y soient incrémentés de 1;

voici la classe
package
{
public class carreDiagonale extends carre
{
function eclaireur():void 
{
this.x = 0;
this.y = 0;
}

public function deplacer():void
{
this.x += 1;
this.y += 1;
}
}
}


Dans ma classe principale,

et voici ma classe principale

package 
{
import flash.display.*;
import flash.text.*;
import flash.utils.*;
import flash.events.*;

public class demo extends MovieClip
{
var carreSimple:MovieClip;

function demo():void 
{
initialisation();
}

function initialisation():void 
{
carreSimple = new carreDiagonale();
carreSimple.width = 32;
carreSimple.height = 32;
carreSimple.name = "en diagonale";

addChild(carreSimple);

stage.addEventListener(Event.ENTER_FRAME, demoEnCours);
}

function demoEnCours(evt:Event):void 
{
var texteCible:String;
var cible:DisplayObject;

// verification que la méthode fonctionne en connaissant le MC
carreSimple.deplacer();

// recuperation du MC en fonction de son nom
texteCible = "en diagonale";
cible = getChildByName(texteCible);
if(cible != null)
{
//cible.deplacer(); // message d'erreur a la compilation
}
}
}
}


le carreSimple.deplacer() fonctionne parfaitement, mais le cible.deplacer() me donne un message d'erreur :
1061: Appel à la méthode deplacer peut-être non définie, via la référence de type static flash.display:DisplayObject.


comment faire pour que la seconde solution soit valide (donc sans pour autant connaitre l'instance du MC mais en connaissant la propriété name)?

merci d'avance

1 réponse

nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
30 juil. 2009 à 21:00
Salut,

2 solutions :
1- Strong typing :
var cible:DisplayObjectcarreDiagonale = getChildByName(texteCible) as carreDiagonale;

2- publish settings:
File->Publish Settings (Fchier -> parametres de publication)
Onglet Flash
En face de Actionscript 3 click sur Settings
Decoche la case Strict Mode


Bonne continuation

http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
0
Rejoignez-nous