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