Update child zIndex in andengine?
在我的游戏应用程序中,在运行时在主场景中添加了许多孩子,我想在运行时将 zIndex 给一个新孩子,但没有考虑到这一点。为了给孩子 zIndex 我使用如下代码:
1 | mySprite.setZIndex(1); |
但是如果我在运行时刷新主场景,那么孩子将正确地获取它的 zIndex。为了刷新主场景,我使用下面的代码:
1 | mainScene.sortChildren(); |
但是如果我在运行时使用上面的代码,那么它会给所有孩子带来混蛋,你知道它看起来很糟糕!那么,如何在没有 jerk 的情况下对主要场景的孩子进行排序?
编辑
我尝试用代码和注释来解释我的问题。在下面的代码中,三种方法:一种方法将动画sprite添加到主场景中,一种方法将动画sprite绘制到主场景中,并且我的动画sprite在线移动,因为 line zIndex 为 2,myAnimSprit zIndex 为 3。但是每 5 秒后,我想在这个例子中更新 animsprite 的 z 索引,比如 1,所以我的 animSprite 上的行是由 changeZIndex 方法完成的,它由 timer 调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | public class TouchPark extends BaseGameActivity { private AnimatedSprite animSprite; private Scene mainScene; // load engine and load all resoureces here @Override public Scene onLoadScene(){ mainScene = new Scene(); createTimerHandler(); addAnimatedSprite() } public void addAnimatedSprite(){ animatedSprite = new AnimatedSprite(- mTextureRegion.getWidth(), - mTextureRegion.getHeight(), mTextureRegion.deepCopy()); animSprite.setZIndex(3); animSprite.setPosition(initX, initY); mainScene.attachChild(animSprite); } public void drawLine(ArrayList<Float> xList , ArrayList<Float> yList){ float x1 = xList.get(xListLength - 2); float x2 = xList.get(xListLength - 1); float y1 = yList.get(yListLength - 2); float y2 = yList.get(yListLength - 1); Line line = new Line(x1, y1 , x2 ,y2 , lineWidth); line.setZIndex(2); //my sprite move on the line so that line zIndex is 2 and animSprite zIndex is 3 line.setColor(1, 0, 0); mainScene.attachChild(line); } public void changeZIndex(){ animSprite.setZIndex(1); // now i want line is on the my animSprite so i changed zIndex of line //but here it will not change zIndex of my animsprite at runTime //but if i write below code then it will get effect mainScene.sortChildren(); //but above code update not only one aimSprite but also all sprite that are presents on the mainScene //and it look like all chilrens get jerk } public void createTimerHandler(){ mGeneralTimerHandler = new TimerHandler(5.0f, true, new ITimerCallback() { public void onTimePassed(TimerHandler pTimerHandler) { changeZIndex(); } getEngine().registerUpdateHandler(mGeneralTimerHandler); } } |
首先加载场景中的所有资源。
然后执行下面的行..
1 | GameActivity.activity.getEngine().setScene(yourScene); |
用户无法查看场景,直到您调用上述线路。
这样它就不会显示那个混蛋了。
初始化一个具有最高 Zorder 的实体。然后将所有动态创建的sprite添加到他的实体。如果未清除,请发布代码