2014-05-04 1 views
1

J'ai ce qui semble être un problème très simple. Je dois créer une forme et l'ajouter à l'intérieur d'un clip qui se trouve à l'intérieur d'un autre clip.AS3: Un terme est indéfini lors de l'ajout d'une forme à l'intérieur d'un MovieClip

Le code J'utilise actuellement comme suit:

var enemy_beacon:Shape = new Shape(); 
fullmenu_mc.menu_map_mc.addChild(enemy_beacon); 

fullmenu_mc.menu_map_mc.enemy_beacon.graphics.lineStyle(1, 0xFF0000, 1); 
fullmenu_mc.menu_map_mc.enemy_beacon.graphics.beginFill(0xFFBB00,1);        
fullmenu_mc.menu_map_mc.enemy_beacon.graphics.drawCircle(50, 50, 25);         
fullmenu_mc.menu_map_mc.enemy_beacon.graphics.endFill(); 

Cependant, ce code va lancer un Error #1010: A term is undefined and has no properties.

Il semble créer la belle forme, mais en ajoutant la forme (via addChild) ou l'accès à l'une de ses propriétés rend tout détraqué.

J'ai déjà vérifié les noms d'occurrence des clips vidéo, tout est orthographié correctement et imbriqué correctement.

Des pensées?

+0

Soit '' fullmenu_mc' ou menu_map_mc' sont des références non valides. –

+0

change 'fullmenu_mc.menu_map_mc.enemy_beacon.graphics' en' enemy_beacon.graphics' –

+0

Merci à tous! Les deux réponses ont fonctionné ... Andrey, j'ai aimé votre solution car elle m'a donné la capacité de rappeler les enfants par leur nom. Karolis et null.point, votre solution n'a pas besoin d'être nommée et a fonctionné aussi bien. Je n'aurai pas besoin d'accéder aux enfants au-delà de les enlever, donc c'est parfait pour mon but. Je suis un peu confus pourquoi cela fonctionne, cependant ... Les instances n'ont-elles pas toujours besoin d'être référées par leur parent? – user3600741

Répondre

0

Puisque vous avez enemy_bacon exemple, vous pouvez y accéder directement:

var enemy_beacon:Shape = new Shape(); 
fullmenu_mc.menu_map_mc.addChild(enemy_beacon); 

enemy_beacon.graphics.lineStyle(1, 0xFF0000, 1); 
enemy_beacon.graphics.beginFill(0xFFBB00,1);        
enemy_beacon.graphics.drawCircle(50, 50, 25);         
enemy_beacon.graphics.endFill(); 
0

Le problème est que vous ne donnez pas de nom à votre forme. Ne sait pas que votre variable nommée enemy_beacon est la même que celle que vous avez ajoutée à ses enfants. Cibler les enfants comme ça signifie que vous utilisez leurs noms d'instance. Donc, fullmenu_mc.menu_map_mc.enemy_beacon signifie que vous recherchez un enfant appelé enemy_beacon à l'intérieur menu_map_mc. Et avec les deux premières lignes, vous venez d'ajouter un enfant à cet élément de menu, mais vous n'avez pas spécifié de nom.

Les noms d'instance ne sont pas identiques à vos variables. Check this out:

var myShape:Shape = new Shape(); 
myShape.name = 'otherShape'; 
this.addChild(myShape); // you add specific item, name doesn't matter 

trace (this.getChildByName('otherShape') == myShape); // you get child by NAME 
// and because the child is the same as you've added, this will output: TRUE