2011-08-20 55 views

回答

5

这取决于您通过更改图层了解的内容。如果您指的是实体的z索引,那么您可以使用entity.setZIndex(int),并且您需要在精灵的父级上手动调用parent.sortChildren()

如果通过更改图层,你意味着从父母分离并附加到另一个父母,那么这是另一个问题。

2

我最近一直在处理这个问题。使用sortChidren和setZOrder维护精灵zorder是令人沮丧的,特别是如果你有复杂的图层组合(场景实体)。

我发现将此重写添加到您拥有的每个实体派生图层。

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

这可让您设置Z顺序sprite.setZOrder(为了++)和你保证你的实体是一个在您设置至少精灵顺序绘制。

我猜这增加了很多开销,但我没有注意到我的星系王牌。 (还未尝试分析它)

问题是,当您调用setZOrder(...)时,需要在添加到父级的每个后续精灵/实体附加后调用sortChildren,否则任何更高级的zorder实体都会被拖动由于setZOrder实际上没有设置3d对象的z轴,所以新添加的实体。只有对象被绘制的顺序。 (无论实体中的mZIndex值如何,所有andengine对象都具有相同的z轴值) 因此,只要将新实体添加到父实体,就必须对子级进行排序。

这是我到目前为止。请纠正我,如果我错了或有更好的解决方案。

+2

但现在我认为重写'attachChild()'并且在那里做会更有效率。 – Justin