2011-08-20 14 views

risposta

5

Dipende da ciò che si capisce cambiando livello. Se si intende l'indice z di entità, è possibile utilizzare entity.setZIndex(int) e chiamare manualmente parent.sortChildren() sul genitore del proprio sprite.

Se cambiando livello si intende il distacco da un genitore e il collegamento a un altro genitore, questo è un altro problema.

2

Ho lavorato a questo problema recentemente. È frustrante mantenere lo zorder degli sprite usando sortChidren e setZOrder, specialmente se si dispone di un complesso arrangment di layer (Scene Entitys).

Ho trovato che aggiungendo questo override a ogni livello derivato Entity che avete.

@Override 
protected void onDrawChildren(GL10 pGL, Camera pCamera) { 
    getParent().sortChildren(); 
    super.onDrawChildren(pGL, pCamera); 
} 

Questo consente di impostare i sprite.setZOrder ordine Z (ordine ++) e si sono garantiti il ​​vostro soggetto è un tratto nell'ordine sprite è stato impostato almeno.

Suppongo che questo aggiunga un po 'di overhead, ma non mi accorgo sul mio galaxy asso. (ancora per provare a profilarlo)

Il problema è che quando si chiama setZOrder (...) è necessario chiamare sortChildren dopo aver collegato ogni sprite/entità successiva aggiunta al genitore, altrimenti qualsiasi entità zorder superiore verrà disegnata sopra da entità aggiunte di recente poiché setZOrder non imposta effettivamente l'asse z dell'oggetto 3d. Solo l'ordine in cui viene disegnato l'oggetto. (tutti gli oggetti andengine hanno lo stesso valore dell'asse z indipendentemente dal valore mZIndex nell'entità) Quindi è necessario ordinare i bambini ogni volta che una nuova entità viene aggiunta all'entità padre.

Questo è quello che ho finora. Per favore correggimi se ho torto o ho qualche soluzione migliore.

+2

ma ora penso di sovrascrivere 'attachChild()' e farlo lì sarebbe molto più efficiente. – Justin

Problemi correlati