我有一个名为loadBalls()的方法。在这个方法中,我调用了另一个名为removeOldBalls()的方法。 在removeOldBalls()中,我有一个runnable来分离场景中的孩子。 以下是两种方法:
public static void loadBalls() {
removeOldBalls();
for (int i = 0; i < MAX_BALL; i++) {
int x = MathUtils.random(0, CAMERA_WIDTH - BALL_SIZE);
int y = BALL_SIZE;
final Ball ball = new Ball(x, y, BALL_SIZE, BALL_SIZE, GraphicsManager.trBalloons[i]);
scene.registerTouchArea(ball);
balls.add(ball);
if (!balls.get(i).hasParent()) {
scene.attachChild(balls.get(i));
}
Log.e("test", "load");
}
}
public static void removeOldBalls() {
((BaseLiveWallpaperService) LWP.context).runOnUpdateThread(new Runnable() {
public void run() {
Log.e("test", "remove");
scene.detachChildren();
}
});
if (balls != null) {
int length = balls.size();
for (int i = 0; i < length; i++) {
fsw.destroyBody(balls.get(i).body);
}
balls.clear();
Log.e("test", "clear");
}
}
我需要的是在添加新儿童之前删除所有儿童。但是当在源代码上面运行时,首先添加子项,然后删除子项。 请告诉我如何在添加之前等待删除完成。
答案 0 :(得分:1)
我想找一堂课android.os.Handler。然后,您可以创建两个线程:一个用于删除所有子项,另一个用于添加子项。然后将这些线程添加到Handler中,如下所示:
handler.post(new Runnable(){
@Override
public void run() {
// Thread to remove children
}
});
handler.post(new Runnable(){
@Override
public void run() {
// Thread to add children
}
});
一旦您逐个添加它们,Android SDK将按照添加的顺序执行它们。因此,这将照顾您的订购问题。
答案 1 :(得分:0)
将添加子项的代码移动到另一个方法,例如addBalls
:
private void addBalls() {
for (int i = 0; i < MAX_BALL; i++) {
int x = MathUtils.random(0, CAMERA_WIDTH - BALL_SIZE);
int y = BALL_SIZE;
final Ball ball = new Ball(x, y, BALL_SIZE, BALL_SIZE, GraphicsManager.trBalloons[i]);
scene.registerTouchArea(ball);
balls.add(ball);
if (!balls.get(i).hasParent()) {
scene.attachChild(balls.get(i));
}
Log.e("test", "load");
}
}
在调用run
之后,在Runnable
的scene.detachChildren
方法之后调用此方法:
public void run() {
Log.e("test", "remove");
scene.detachChildren();
addBalls();
}