2010-02-13 5 views
0

Comment vérifier si sth alr existe sur scène? N'y a-t-il pas imprimé "n'existe pas" pour le 1er et "exister" pour le second? Mais il imprime "n'existe pas" pour les deux.Comment vérifier si sth alr existe sur scène?

J'ai ajouté une minuterie parce que je pensais avoir besoin d'attendre un peu pour l'ajouter à la scène, mais cela ne fonctionne pas.

var idonnoe:TextField = new TextField(); 

if (Boolean(this.getChildByName('idonnoe'))) 
    { 
    trace("exists"); 
    } 
    if (!Boolean(this.getChildByName('idonnoe'))) 
    { 
    trace("doesn't exist"); 
} 

addChild(idonnoe); 
idonnoe.text = "hello"; 

var delay1:Timer = new Timer(1000, 1); 
delay1.start(); 
delay1.addEventListener(TimerEvent.TIMER_COMPLETE, afterDelay); 

function afterDelay(e:TimerEvent) :void { 
    if (Boolean(this.getChildByName('idonnoe'))) 
     { 
     trace("exists"); 
     } 
     if (!Boolean(this.getChildByName('idonnoe'))) 
     { 
     trace("doesn't exist"); 
    } 
} 

Répondre

1

La méthode getChildByName prend en considération la propriété myDisplayObject.name, pas le nom de la variable qui pointe vers elle. Essayez de définir la propriété et elle devrait maintenant exister comme vous le recherchez.

idonnoe.name = "idonnoe"; 
+0

Le délai dont vous disposez ne devrait même plus être nécessaire. – LopSae

0

Il est plus courant de référencer directement vos objets. Cela rend plus facile à gérer ce genre de cas. La méthode 'contains(displayObject:DisplayObject)' de DisplayObjectContainer est très pratique pour savoir si un objet est attaché ou non à la liste d'affichage.

var displayObject:TextField = new TextField(); // any sublclass of DisplayObject 
addChild(displayObject); 

// test if the current display list contains the sprite 
trace(contains(displayObject)); 

// test if the sprite is attached to the stage 
trace(displayObject.stage != null); 

// test if the sprite is attached to ANY display list 
trace (displayObject.parent != null); 
+0

Quand utiliseriez-vous un Sprite? Ce que je sais de Sprite est un clip vidéo sans chronologie. – yeeen

+0

oh désolé, je viens d'utiliser un sprite, mais il aurait pu être un TextField, MovieClip ou toute autre chose qui étend vraiment DisplayObject. va éditer ... –

+0

Et pour répondre rapidement à votre question, sprite est un DisplayObject "plus léger" puisqu'il ne contient pas de méthodes liées à la timeline. De plus, le sprite n'est pas une classe dynamique, donc vous ne pouvez pas créer de champs à la volée (ce qui rend l'exécution plus lente). Essentiellement, essayez d'utiliser Sprite plutôt que MovieClip si votre DisplayObject ne contient aucun scénario. –