2012-10-19 10 views
5

Próbuję dołączyć duszka do innego duszka i dołączyć je za jego rodzica.AndEngine - Dziecko sprite'a rysującego za rodzicem

Zwykle jest to bardzo proste i mam je już wcześniej w moim kodzie - ale z jakiegoś powodu, w jednym przypadku, to nie działa.

Proces zwykle polega na ustawieniu indeksu Z nadrzędnego na pewną liczbę i przypisaniu niższego indeksu Z jego elementowi potomnemu. Oto kod, w którym rect jest rodzica, i icon jest dołączony do niego; oba są dołączone do jednostki nadrzędnej. Potem wypróbowałem metodę sortChildren() na wszystkim (rect, parent entity, a nawet sama scena); Wiem, że to nie jest skuteczne, ale chciałem tylko sprawdzić, czy coś się przyda. Tak nie jest. icon wciąż jest przeciągany przez 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(); 

Logicznie rzecz biorąc, powinno to być przesadą i mają to działa, ale to nie jest/ Am I brakuje czegoś?

Dzięki

+0

Czytam, że po podłączeniu dziecka, przywraca ZIndex dziecka do zera. Czy próbowałeś dołączyć przed ustawieniem? Nie mogę znaleźć na to weryfikacji, więc ... – Geobits

+0

Tak, ale niestety, to nie działa tak dobrze. Rozwiązałem to, przywiązując oba sprite'y do istoty, a następnie posortowałem je w istocie. – LoneDuck

+0

Tak, zobaczyłem to zaraz po tym, jak skomentowałem. Zakładałem, że chcesz zachować związek dziecko/rodzic, więc uznałeś, że i tak warto spróbować. Cieszę się, że to działa. – Geobits

Odpowiedz

17

Jest coś magicznego SO. Mogę mocno utknąć na problemie, w końcu zrezygnować i zadać pytanie na tej stronie. W ciągu kilku minut problem rozwiązuje się z łatwością.

Rozwiązanie:

nr Children w AndEngine GLES2 nie można wyciągnąć za ich parents. Ale! Zamiast dołączać duszkiem do duszka nadrzędnego, można dołączyć zarówno do encji, dać im indeksy Z, a następnie posortować encję.

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

Zgadzam się z tym, co magiczne ...... Myślę, że ma to związek z faktem, że aby zadać pytanie, musisz jasno określić problem, jaki masz i co zrobiłeś, aby go rozwiązać. Czasami to pomaga wyzwalać alternatywne formy myślenia. Powodzenia w grze! –

+0

dzięki. ekstrakt rozwiązania – JohnRaja

+0

To nie jest prawda! ustaw z-index na minus (f.e. -1), aby narysować go za rodzicem! setZIndex (-1); i nie zapomnij zadzwonić do parent.sortChildren(); – sjkm

5

Jeśli używasz AndEngine GLES2 to jest całkiem proste: po podłączeniu dziecko, po prostu ustawić jej z-index do wartości ujemnej.

Powiązane problemy