2014-04-04 5 views
6

Mentre stavo guardando intorno per informazioni sulla texture spritekit, e mi sono imbattuto in questa citazione:Renderizza i nodi in un solo passaggio di disegno con spritekit?

Se tutti i figli di un nodo di utilizzare la stessa modalità si fondono e la consistenza atlante, quindi Kit Sprite solito può disegnare questi sprite in un unico passaggio di disegno. D'altra parte, se i bambini sono organizzati in modo che la modalità di disegno cambi per ogni nuovo sprite, Sprite Kit potrebbe eseguire un passaggio di disegno per sprite, che è piuttosto inefficiente.

Ma check this out:

Piastrelle con la stessa struttura (vi assicuro che si tratta di una trama, non solo un colore) Untextured tiles

Piastrelle con la propria consistenza Textured tiles

Il il conteggio dei disegni ha una differenza di 40, sebbene tutte le trame utilizzate provengano dallo stesso atlante.

Sto interpretando male la parola "atlante"?

Questo è dove devo conservare le mie immagini:

texture atlas

è il mio esempio un 'atlante di texture,' o è la definizione di 'atlante' qui un singolo .png che contiene tutte le immagini necessarie, e le singole tessere vengono tagliate da esso?

Oppure il problema è probabilmente nel modo in cui sto caricando/qualcos'altro?

Grazie!

risposta

5

Il problema qui è molto probabilmente dovuto al grafico del nodo stesso. Supponi di avere 100 folletti come figli della scena, senza sub-figli, e tutti usano trame dello stesso atlante e modalità di fusione predefinite, quindi Sprite Kit eseguirà il batch di questi 100 sprite in una sola chiamata.

Tuttavia se questi folletti di tile hanno figli propri, forse formano o etichettano i nodi per il debug, allora questo "interrompe" l'operazione di disegno in batch.

Controlla il grafico del nodo. Assicurati che tutti gli sprite delle tessere siano figli dello stesso genitore e che non abbiano figli, usa le stesse modalità di fusione e le stesse trame dello stesso atlante. Quindi il disegno in lotti funzionerà sicuramente.

Se ciò non funziona, verificare che la cartella tiles.atlas sia correttamente convertita in un atlante di trama nel pacchetto. Se apri il pacchetto di app compilato, dovresti trovare una cartella denominata "tiles.atlasc" con un plist e uno o più file png al suo interno, contenente tutte le singole immagini della cartella. Inoltre nessuna di queste immagini individuali dovrebbe apparire nel bundle - se sono aggiunte al bundle come singoli file usando gli stessi nomi dell'atlante, Sprite Kit imposterà automaticamente i singoli file di immagine invece di ottenerli dall'atlante di texture .

+0

Hm, questo non funziona ancora. I nodi sprite sono figli del nodo, non della scena, è questo il problema? Nessuno di loro ha figli. EDIT: I AM A IDIOT. Uno dei miei tipi di tessere si riferiva a un'immagine nella cartella delle immagini ... E quella tessera stava rovinando tutto. E 'successo essere la mia tessera terreno solido ... – IAmTheAg

+0

Um ... aiutami con un'altra cosa. Caricamento di trame in questo modo sembra incredibilmente inefficiente.L'inizializzazione degli sprite richiede molto più tempo per me ora, perché la mappa delle tessere deve essere costantemente percorsa e generata mentre procede. Qual è il modo più veloce per inizializzare un tale sprite? – IAmTheAg

+1

beh, se si esegue il metodo ..imageNamed: molto (sia per sprite che texture/textureatlas) che potrebbero potenzialmente creare un sovraccarico. Per la mia tilemap tengo sia l'atlas in un forte riferimento, sia le textures in un array (indicizzato da GID) per un accesso rapido. Dai un'occhiata al renderer della tilemap in kit kobold. – LearnCocos2D

Problemi correlati