2012-10-19 30 views
5

我試圖將精靈項目附加到其他精靈項目並將其附加在其父項後面。AndEngine-在其父項背後繪製精靈的子項

這通常很簡單,我在我的代碼中已經有一個 - 但由於某種原因,在一次實例中,它不起作用。

該過程通常是將父母的Z索引設置爲某個數字,並將較低的Z索引分配給其子女。這裏是代碼,其中rect是父代,並且icon被連接到它;兩者都附屬於母公司。 然後,我試了一下所有方法的sortChildren()方法(矩形,父實體,甚至是場景本身);我知道這樣做效率不高,但我只是想看看是否有某些事情發生。它沒有。 icon仍然被繪製在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(); 

從邏輯上講,這應該是矯枉過正,並有工作,但它不是/ 我錯過了什麼?

感謝

+0

我讀到,當你附加一個孩子時,它會將孩子的ZIndex恢復爲零。在設置之前你有沒有嘗試過附加我找不到驗證,所以... – Geobits

+0

是的,但可悲的是,這並沒有奏效。我已經通過將兩個精靈連接到實體來解決此問題,然後將它們排序在實體中。 – LoneDuck

+0

是的,在我評論後我就看到了。我以爲你想保持孩子/父母的關係,所以計算它可能值得一試。真高興你做到了。 – Geobits

回答

17

有一些神奇的SO。我可以堅持一個問題,最終放棄並在本網站上提出問題。在幾分鐘內,問題就輕鬆解決了。

解決辦法:

號在AndEngine GLES2Children不能將其parents後面繪製。但!您可以將兩個圖形都附加到一個實體上,爲它們提供Z個索引,然後對實體進行排序,而不是將這個精靈附加到父圖形上。

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

我同意神奇的事情......我認爲這與事實有關,爲了提出問題,您需要清楚地說明您遇到的問題以及您所做的努力來解決問題。有時候這有助於引發其他形式的思考。祝你好運! –

+0

謝謝。提取溶液 – JohnRaja

+0

這不是事實!將z-index設置爲minus(f.e. -1)以將其繪製在它的父項後面! setZIndex(-1);並且不要忘記調用parent.sortChildren(); – sjkm

5

如果您正在使用AndEngine GLES2這是很容易:將孩子後,只需將其Z-指數爲負值。