Identifica MovieClip in AS3 tra DisplayObjectContainer
-
22-07-2019 - |
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?
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
restituisceDisplayObject
, nonDisplayObjectContainer
come hai suggerito nella domanda. -
numChildren
è una proprietà della classeDisplayObjectContainer
eMovieClip
non è l'unica classe derivata di esso.Loader
,Stage
eSprite
estendeDisplayObjectContainer
.MovieClip
è una sottoclasse diSprite
. Quindi il trucco di numChildren fallirà se si desidera utilizzare azioni specifiche di movieclip comegotoAndStop
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.