在我的游戏应用程序中,在运行时在主场景中添加了许多子项,并且我想在运行时将zIndex提供给新的子项,但不考虑它。为了给孩子提供zIndex,我使用如下代码:
mySprite.setZIndex(1);
但是如果我在运行时刷新主场景,那么孩子将正确地获取其zIndex。为了刷新主场景,我使用下面的代码:
mainScene.sortChildren();
但如果我在运行时使用上面的代码,那么它会给所有孩子一个混蛋,你知道它看起来非常糟糕!那么,如何对没有混蛋的主场景儿童进行排序?
修改
我尝试用代码和评论来解释我的问题。在下面的代码中,有三种方法:一种方法将动画精灵添加到主场景中,一种绘制线方法将线绘制到主场景中,我的animsprite在线上移动,因为线zIndex是2而myAnimSprit zIndex 3是这样。但是在每5秒之后,我想在这个例子中更新z animsprite的索引,例如1,所以line在我的animSprite上,由changeZIndex方法完成并且由timer调用。
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);
}
}
答案 0 :(得分:1)
首先加载场景中的所有资源。
在线下之后的那个工具..
GameActivity.activity.getEngine().setScene(yourScene);
用户无法在您拨打上线之前查看该场景。
所以它不会显示那个混蛋。
答案 1 :(得分:0)
初始化具有最高Zorder的实体。然后将所有动态创建的精灵添加到他的实体。如果没有清除,则发布代码