Domanda

in ActionScript 3, se eseguo il ciclo tra i figli di un clip filmato, verrà restituito DisplayObjectContainer, che è un elenco di DisplayObjects.

Tuttavia, il tipo AS3 non può identificare MovieClip poiché MovieClip è ora un oggetto, anziché un tipo di dati. Come posso identificare correttamente MovieClip?

Ho trovato 3 soluzioni online:

Soluzione 1 (la soluzione che sto usando):

  

Innanzitutto imposta il nome MovieClip su a   nome specifico, quindi nell'iterato   processo, controlla il nome dei bambini   utilizzando child.name.indexOf (" specificName ") > -1

Soluzione 2:

  

usa child.hasOwnProperty (" numChildren ") per identificare un MovieClip

Soluzione 3:

  

usa plug-in di terze parti come FlashDevelop

quale soluzione è la migliore? o ci sono alternative?

È stato utile?

Soluzione

In realtà è molto migliorato e semplificato in AS3. Puoi semplicemente usare " è " operatore:

for(var i:int = 0; i < containerObj.numChildren; i++) {
    if(containerObj.getChildAt(i) is MovieClip) {
        // do something
    }
}

Il I Flash vissuti per questo argomento hanno qualche dettaglio in più.

Altri suggerimenti

Usa è come suggerito richleland.

Chiedo scusa in anticipo per il nitpicking ma non ho potuto resistere nel dire questo:

  • getChildAt restituisce DisplayObject , non DisplayObjectContainer come hai suggerito nella domanda.
  • numChildren è una proprietà della classe DisplayObjectContainer e MovieClip non è l'unica classe derivata di esso. Loader , Stage e Sprite estende DisplayObjectContainer . MovieClip è una sottoclasse di Sprite . Quindi il trucco di numChildren fallirà se si desidera utilizzare azioni specifiche di movieclip come gotoAndStop sul bambino.
  • Il modo corretto di confrontare il nome sarebbe child.name == " specificName " a meno che tu non stia usando " specificName " come prefisso o suffisso per tutti i bambini che sono filmati.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top