5

如何在andengine Scene中运行时更改Sprite的图层?

4

2 回答 2

5

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

如果通过更改层,您的意思是从一个父级分离并附加到另一个父级,那么这是另一个问题。

于 2011-11-08T23:33:31.843 回答
2

我最近一直在研究这个问题。使用 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 轴值)因此,无论何时将新实体添加到父实体,您都必须对子实体进行排序。

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

于 2012-03-22T10:01:07.837 回答