0

我有一个名为 loadBalls() 的方法。在这个方法中,我调用了另一个名为 removeOldBalls() 的方法。在 removeOldBalls() 中,我有一个可运行的对象来分离场景中的孩子。以下是2种方法:

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");
    }

}

我需要的是在添加新孩子之前删除所有孩子。但是在上面运行源代码时,首先添加孩子,然后删除。请告诉我如何在添加之前等待删除完成。

4

2 回答 2

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 就会按照它们添加的顺序执行它们。这样就可以解决您的订购问题。

于 2013-07-03T17:01:57.803 回答
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();
}
于 2013-07-05T00:38:26.780 回答