AndEngine- 绘制精灵的子元素在其父元素之后

5

我试图将一个精灵附加到另一个精灵上,并使其位于父级后面。

通常情况下,这很容易实现,我之前在我的代码中也做过,但是由于某种原因,在某个实例中它不起作用。

通常的处理方法是将父级的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();

从逻辑上讲,这应该是过度设计并且已经可以工作了,但实际上它不是/ 我是否漏掉了什么?

谢谢


我看到当你附加一个子元素时,它会将子元素的ZIndex还原为零。你试过先设置再附加吗?我找不到这方面的验证,所以... - Geobits
是的,但可悲的是,那并没有很好地解决问题。我通过将两个精灵附加到一个实体上,并在实体中对它们进行排序来解决了这个问题。 - LoneDuck
是的,我在评论后立即看到了。我假设您想要保持子/父关系,所以认为这可能是值得尝试的。很高兴你让它工作了。 - Geobits
2个回答

17

SO上有一种神奇的力量。我可能会被一个问题难住,最终放弃并在这个网站上提问。但是几分钟后,问题就很容易地得到了解决。

解决方案:

不,AndEngine GLES2中的Children不能在它们的parents后面绘制。但是,你可以将child精灵和parent精灵都附加到实体上,并为它们分配Z索引,然后对该实体进行排序。

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

3
我同意关于魔法的想法......我认为这与提出问题有关,你需要清楚地陈述你遇到的问题以及尝试解决它所做的事情。有时候这可以激发出替代性思维方式。祝你游戏好运! - boltup_im_coding
这不是真的!将 z-index 设置为负数(例如-1)以将其绘制在其父级后面!setZIndex(-1); 不要忘记调用 parent.sortChildren(); - sjkm

5

如果你正在使用AndEngine GLES2,那么这很容易实现:在添加子元素后,只需将其Z轴索引设置为负值即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接