2012-10-19 9 views
5

Sto provando ad associare uno sprite ad un altro sprite e collegarlo dietro il suo genitore.AndEngine- Disegno del figlio dello sprite dietro il suo genitore

Questo è in genere molto semplice, e ne ho uno in precedenza nel mio codice, ma per qualche motivo, in una sola istanza, non funziona.

In genere, il processo imposta l'indice Z del genitore su un numero e assegna un indice Z più basso al suo figlio. Qui è il codice dove rect è il genitore e icon è collegato ad esso; entrambi sono collegati a un'entità genitore. Poi ho provato il metodo sortChildren() su tutto (rect, genitore entità, e anche allora scena stessa); So che questo non è efficiente, ma volevo solo vedere se qualcosa va avanti. Non è così. icon è ancora in fase di elaborazione su rect:

for (int i=0; i<levelsList.size(); i++) { 
    rect = new Sprite(i*(width+padding), 
         0, 
         width, 
         height, 
         levelSelectorSquareRed, 
         this.getVertexBufferObjectManager()); 
    icon = new Sprite((rect.getWidth()-innerWidth)/2f, 
         (rect.getHeight()-innerHeight)/2f, 
         innerWidth, 
         innerHeight, 
         levelIcons.get(i), 
         this.getVertexBufferObjectManager()); 
    rect.setZIndex(1); 
    icon.setZIndex(0); 
    rect.attachChild(icon); 
    rect.sortChildren(); 
    levelSquares.attachChild(rect); 
} 

levelSquares.setPosition(0, (CAMERA_HEIGHT-height)/2f); 
levelSquares.sortChildren(); 
levelSelectorScene.attachChild(levelSquares); 
levelSelectorScene.sortChildren(); 

A rigor di logica, questo dovrebbe essere eccessivo e farlo lavorare, ma non è/ Mi sto perdendo qualcosa?

Grazie

+0

Ho letto che quando si allega un bambino, ripristina lo ZIndex del bambino a zero. Hai provato a collegarti prima di impostare? Non riesco a trovare la verifica per questo, quindi ... – Geobits

+0

Sì, ma purtroppo non ha funzionato altrettanto bene. Ho risolto questo problema collegando entrambi gli sprite a un'entità e poi li ho ordinati nell'entità. – LoneDuck

+0

Sì, l'ho visto subito dopo aver commentato. Supponevo che volessi mantenere la relazione figlio/genitore, quindi ho pensato che valesse la pena provare comunque. Sono contento che tu abbia funzionato. – Geobits

risposta

17

C'è qualcosa di magico in SO. Posso rimanere bloccato su un problema, finalmente mollare e fare una domanda su questo sito. In pochi minuti il ​​problema è risolto con facilità.

La soluzione:

No. Children in AndEngine GLES2 non può essere disegnato dietro il loro parents. Ma! Invece di collegare lo sprite child allo sprite genitore, è possibile allegare entrambi a un'entità, assegnare loro gli indici Z e quindi ordinare l'entità.

levelSquares.attachChild(rect); 
levelSquares.attachChild(icon); 
rect.setZIndex(1); 
icon.setZIndex(0); 
levelSquares.sortChildren(); 
+3

Sono d'accordo sulla cosa magica ...... Penso che abbia a che fare con il fatto che per fare una domanda devi chiarire chiaramente il problema che hai e cosa hai fatto per cercare di risolverlo. A volte ciò aiuta a innescare forme alternative di pensiero. Buona fortuna con il gioco! –

+0

grazie. estrarre soluzioni – JohnRaja

+0

Questo non è vero! imposta z-index su minus (ad esempio -1) per disegnarlo dietro al suo genitore! setZIndex (-1); e non dimenticare di chiamare parent.sortChildren(); – sjkm

5

Se si utilizza AndEngine GLES2 è abbastanza facile: dopo aver attaccato il bambino, è sufficiente impostare la sua Z-Index su un valore negativo.