Aide - Recherche - Membres - Calendrier
Version complète : getDefinitionByName qu'en fait qu'à sa tête.
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Intégration 3D > Sandy
ChapF
Salut à tous, comme déjà annoncé sur ce topik, je n'arrive pas à faire marcher getDefinitionByName pour créer une instance d'une classe perso, qui est un model 3D en .as

Voici mon code source :

Action Script


function f1():void
{
f2("int","support_swf_1");
}


function import_support_swf(id_tg_support:int,type_support_swf:* = null):void
{
support_swf_list[id_tg_support] = new Array();


//Creation du transformgroup et ajout dans le transformgroup principal
var tg_contener:TransformGroup = new TransformGroup("tg_contener");
support_swf_list[id_tg_support][0] = tg_contener;
tg_p.addChild(support_swf_list[id_tg_support][0]);

//Import du fichier 3D support_swf et set apparance

//appel fictif de l'instance pour qu'elle soit compilé
support_swf_1;

//Pourkoi ce if? Car comme sa pour l'instant je continu de coder sans donner de valeur à type_support_swf

var contener:* = new support_swf_1("contener");

if (type_support_swf !== null)
{
contener = new (getDefinitionByName(type_support_swf));
}
//... modifications


Donc à savoir que si je ne précise pas de valeur pour le deuxième argument, tous ce passe bien, mais si je mets "support_swf_1", sa marche pas. Sa me met:
Citation
ReferenceError: Error #1065: La variable support_swf n'est pas définie.
at global/flash.utils::getDefinitionByName()
at principal/::import_support_swf()
at principal/::D_init()
at principal$iinit()


Puisque tout marche si ma class n'est pas celle que j'utilise ici, je me demande bien d'ou sa peu venir.

Merci d'avance pour votre aide. Je pense surtout à toi kikourou qui a peut être une idée d'où sa peu venir.

Je poste aussi le début de mon model.as si sa peu aider :

Action Script


internal class support_swf extends Shape3D implements Primitive3D
{
private var l:Geometry3D ;
private function v(x:Number,y:Number,z:Number):void
{
l.setVertex(l.getNextVertexID(),x,y,z );
}
private function vn(nx:Number,ny:Number,nz:Number):void
{
l.setVertexNormal(l.getNextVertexNormalID(),nx,ny,nz );
}
private function uv(u:Number,v:Number):void
{
l.setUVCoords(l.getNextUVCoordID(),u,v);
}
private function f(vn0:int, vn1:int, vn2:int, uvn0:int, uvn1:int,uvn2:int):void
{
l.setFaceVertexIds(l.getNextFaceID(), vn0, vn1,vn2);
l.setFaceUVCoordsIds( l.getNextFaceUVCoordID(), uvn0,uvn1,uvn2);
}
public function support_swf( p_Name:String=null )
{
super( p_Name ) ;

geometry = generate() ;
}

public function generate(... arguments):Geometry3D
{
l = new Geometry3D();
v(-12.9731,-1.01495,-7.79588);
v(20.8459,-1.01499,-7.79588);
v(-12.9731,-1.01493,7.73014);
v(20.8459,-1.01498,7.73014);
//...//
return (l);
}
}
Logic
Salut.

Pas tout compris à ce que tu voulais faire, mais déjà:

Action Script


if (type_support_swf !== null)
{
contener = new (getDefinitionByName(type_support_swf));
}


j'espère que type_support_swf est bien une string. Ensuite comme je sais pas d'où elle sort je peux pas dire...

Ensuite:

Action Script


//appel fictif de l´instance pour qu´elle soit compilé
support_swf_1;


Pas tout compris là... c'est quoi ? Ca fait quoi ?
ChapF
Oui oui type_support_swf est bien de type string : elle peut valoire "support_swf_1" ou "support_swf_2"... à oui dsl avec un mauvais copié coller...
En fait dans la fonction f1 c'est pas f2("int","support_swf_1"); mais plutot import_support_swf("int","support_swf_1");
C'est vrai que sinon on pige que dalle. Désolé.

support_swf_1;
En fait, j'appel une instance de ma classe pour forcer la compilation de celle si, sinon flash l'oublie (d'apres un problème du même type qui a été réglé comme ceci sur le forum Acs3).
Merci pour ta réponse.
Logic
Essai plutôt en commençant par la base, genre:

Action Script



function f1():void
{
import_support_swf("int","support_swf_1");
}


function import_support_swf(id_tg_support:int,type_support_swf:* = null):void
{
var obj:Object = new getDefinitionByName("monType")();// /!\ <- les parenthèses /!\
trace(obj);
}


Une fois que ça marche tu remets tes variables, tes trucs de 3D et hop.

Bonne chance.
ChapF
Merci (un peu tardif) pour cette reponse, en effet je vois mon erreur icon_redface.gif , je testerai sa quand j'en aurrai de nouveau besoin, j'ai fait sa d'une autre maniere. Merci encore
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.