2012-02-21 12 views
5

In che modo Flash gestisce gli elementi fuori scena?Gli oggetti DisplayObject off-stage in Flash stanno ancora rallentando il mio gioco?

Ovviamente Flash non li rende effettivamente (perché non compaiono ovunque sullo schermo), ma è il processo di renderli ancora esistenti, rallentando il mio gioco tanto quanto sarebbe se gli elementi fossero on- schermo?

Oppure Flash ignora in modo intelligente gli elementi che non rientrano in un'area visualizzabile?

Devo gestire manualmente la rimozione di oggetti dallo DisplayList e aggiungerli nuovamente come uscita e accedere allo stage, oppure questo sarà irrilevante?

+1

Si potrebbe scrivere un semplice test. Sebbene non siano renderizzati, sono ancora nella gerarchia e potrebbero fare cose cattive come animare, eseguire script e inviare tonnellate di eventi. –

+0

Penso che il disegno reale degli oggetti mangi la maggior parte delle prestazioni, quindi quando sono fuori scena non dovrebbe essere un problema. ma come ha detto valentin, quando stanno ancora "eseguendo script e/o inviando tonnellate di eventi" stanno sicuramente rallentando l'intero gioco. se non riappariranno sul palco, distruggili - se lo faranno, prova a "metterli in pausa" finché non riappariranno ... – pkyeck

+0

Sono d'accordo sul fatto che dovresti scrivere dei test, ottenere un sacco di oggetti e animarli a vicenda e fuori sullo schermo, usando il profiler Flash Builder dovresti essere in grado di localizzare i colli di bottiglia. Vorrei testarli solo dopo averli visti fuori dallo schermo, e anche testare removeChild() e visibile dopo essere usciti dallo schermo, non usare comunque alpha 0. – Neil

risposta

2

Sì, stanno rallentando il tuo gioco.

In uno dei miei primi esperimenti ho sviluppato un gioco a scorrimento laterale con molti NPC sparsi sulla mappa, non tutti visibili nello stesso schermo. Dovevo ancora calcolare le cose ma non erano sullo schermo. La performance è risultata significativamente migliore quando ho gestito la rimozione dalla lista di visualizzazione quando non pertinente (semplicemente controllando la loro X in relazione alla "camera"). Ancora una volta, non sto parlando di codice aggiuntivo ed eventi che possono essere collegati a loro, solo semplici figli grafici di un Movie Clip.

La migliore pratica, tuttavia, nella mia esperienza, è il disegno degli oggetti in bitmap. Naturalmente se sei troppo in profondità nel tuo gioco, questo potrebbe essere irrilevante, ma se hai il tempo di investire, questo è uno dei modi migliori per ottenere il massimo da AS3 per quanto riguarda i giochi 2D. Ho trovato alcuni dei più grandi tutorial riguardanti bitmap e AS3 in 8bitrocket http://www.8bitrocket.com/books/the-essential-guide-to-flash-games/ Posso approfondire l'argomento se vuoi, ma penso che sto andando fuori tema qui.

+0

Buono background e buoni consigli su bitmap; questo è qualcosa che sto facendo da un po 'ora. – Marty

0

Anche se alcuni oggetti di visualizzazione sono fuori area, vengono comunque eseguiti. Se hanno animazione in loro esecuzione, ciò potrebbe rallentare le prestazioni.

La domanda sorge spontanea, perché è necessario mantenere gli articoli non utilizzati fuori dal palco? se è necessario "memorizzare" il filmatoClip per caricarlo più velocemente, quindi caricarlo in un fotogramma chiave in cui il controllo non verrà mai eseguito. per es. caricare gli oggetti di visualizzazione che si desidera mostrare nel fotogramma 1, quindi inserire un punto di arresto() nel pannello azioni del fotogramma, renderlo un fotogramma chiave e nel fotogramma 2 caricare le animazioni inutilizzate. poiché c'è un stop() nel frame 1, il controllo non va mai nel frame 2, ma gli oggetti di visualizzazione sono memorizzati nella cache.

Oppure, se si dispone di codici negli oggetti di visualizzazione non utilizzati e quindi è necessario caricarli insieme ai componenti principali del gioco, quindi, provare a mettere stop() nei fotogrammi degli oggetti di visualizzazione non utilizzati in modo che non animino .

Problemi correlati