2008-12-20 6 views
0

J'essaie d'obtenir un clip dynamique à partir du montage.AS3 Timeline Problèmes de variable

J'ai une chronologie de longueur inconnue avec un clip avec le nom d'instance "blah" sur l'une des images clés (supposé 88 dans ce cas).
Peu importe ce que je fais, je ne peux pas obtenir une référence à ce clip.

Voici ce que j'ai essayé:

trace(blah); // null 
trace(this.blah); // null 
trace(getChildByName("blah")); // null 

if(currentFrame == 88) 
    trace(getChildByName("blah")); // null 

for(var i:int=0; i<numChildren; ++i) 
    trace(getChildAt(i)); 
/* Returns: 
* [object MovieClip] 
* [object Shape] 
* null 
* [object TextField] 
*/ 

// Assuming the first movie clip is the correct one 
trace(getChildAt(0).name); // instance?? where ?? are random digits, I'm expecting "blah" 

Quelqu'un peut-il s'il vous plaît faire la lumière sur la façon de timeline importer des objets générés par le code?

Répondre

0

Si vous venez juste de passer à l'image 88, il se peut que vous essayiez de l'utiliser avant son initialisation. Essayez d'ajouter:

stage.addEventListener(Event.ADDED, onAdded); 

function onAdded(event:Event):void 
{ 
    trace("new object "+event.target); 
    trace("new object name "+event.target.name); 
} 

et voir si/quand il est créé

+0

Oh, merci! Je n'ai jamais connu cet événement. – LiraNuna

0

Si vous chargez un swf les noms d'instance dans ce ne sera pas directement, et (selon la configuration de votre timeline) le même est valide pour se déplacer en utilisant gotoAndStop() ou gotoAndPlay(). Cela vous forcera à implémenter une solution de contournement en écoutant Event.ADDED (en cas d'ajout d'un swf), ou Event.ENTER_FRAME ou Event.RENDER (pour gotoAndStop/gotoAndPlay).

Je ne connais pas les détails exacts mais les commentaires sur http://bugs.adobe.com/jira/browse/FP-43 contiennent des liens utiles.

Il existe une autre solution pour le problème gotoAndPlay/Stop: assurez-vous que tous vos symboles sont disponibles dans le MovieClip en ajoutant une image clé à l'image 1 où vous avez déjà défini le nom de l'occurrence. Selon la situation, cela peut être aussi lourd que la solution de contournement de l'auditeur, mais parfois c'est plus propre.

0

LiraNuna,

mes excuses à l'avance - Je ne sais pas comment vous êtes expérimenté avec Flash, donc mes suggestions peuvent être injurieuse de base ...

D'abord, comment avez-vous ajouté le clip , et lui assigner un nom? L'avez-vous ajouté via l'IDE?

Si oui, une erreur que je fais souvent est que j'ai la mauvaise chose sélectionnée quand je nomme quelque chose. En d'autres termes, au lieu d'attribuer un nom au clip A, je l'assigne au parent du clip. Ou pire, j'attribue par mégarde une étiquette d'image au lieu d'un nom d'objet. Le comportement que vous décrivez (au lieu du nom "blah", le clip a le nom "instance ##") est cohérent avec l'ajout d'un clip dans l'EDI, mais sans le nommer - 'instance ##' est le schéma de dénomination par défaut de Flash IDE pour les objets que vous n'avez pas nommés vous-même. Donc, je vérifie que vous avez bien attribué le nom que vous pensez avoir.

D'un autre côté, si vous avez ajouté ce clip par programme, pouvez-vous fournir le code que vous avez déjà utilisé?

Cheers, Matt

0

Ce problème est asynchrone que nous avions sur Flash Player 9. Une solution simple est d'attendre le premier envoi de l'événement ENTER_FRAME après avoir modifié le cadre ou utiliser l'événement pour savoir exactement quand votre objet est ajouté à la liste d'affichage.Heureusement, ce problème est résolu sur Flash Player 10.

http://www.bytearray.org/?p=236