如何在动态场景中运行时更改Sprite的图层?
答案 0 :(得分:5)
这取决于您通过更改图层了解的内容。如果您的意思是实体的z索引,那么您可以使用entity.setZIndex(int),并且需要在精灵的父级上手动调用parent.sortChildren()。
如果通过更改图层意味着从一个父母分离并附加到另一个父母,那么这是另一个问题。
答案 1 :(得分:2)
我最近一直在研究这个问题。使用sortChidren和setZOrder维护sprite的zorder是令人沮丧的,特别是如果你有一个复杂的图层排列(场景实体)。
我发现将此覆盖添加到您拥有的每个Entity派生层。
@Override
protected void onDrawChildren(GL10 pGL, Camera pCamera) {
getParent().sortChildren();
super.onDrawChildren(pGL, pCamera);
}
这允许你设置Z顺序sprite.setZOrder(order ++),并保证你的实体是以你至少设置的精灵顺序绘制的。
我猜这会增加相当多的开销,但我没注意到我的银河王牌。 (还要尝试分析它)
问题在于,当你调用setZOrder(...)时,你需要在附加添加到父级的每个后续sprite / entity之后调用sortChildren,否则任何更高的zorder实体将被新添加的实体吸引,因为setZOrder会实际上并没有设置3d对象的z轴。仅绘制对象的顺序。 (无论实体中的mZIndex值如何,所有的andengine对象都具有相同的z轴值) 因此,只要将新实体添加到父实体,就必须对子项进行排序。
这是我到目前为止所拥有的。如果我错了或有更好的解决方案,请纠正我。