1

I'm creating Live Wallpaper with AndEngine GLES1 and when my lwp started sometimes I get an error: java.lang.IndexOutOfBoundsException: Invalid index 4 size is 4. I know, that sprites should be attached and detached in runOnUpdateThread, but how to be with several sprites? My code doesn't work good, not all sprites are loaded after resume:

//here I'm detach all sprites from scene
public void clearScene(Scene scene) {
        mEngine.runOnUpdateThread(new Runnable() {
                  @Override
                  public void run() {
                        int l = getEngine().getScene().getLayerCount()-1;
                        while (l >= 0) {
                                while(getEngine().getScene().getLayer(l).getEntityCount() > 0){
                                        getEngine().getScene().getLayer(l).removeEntity(0);
                                }
                                l--;
                        }
                  }
        });
}

public void buildScene(Scene scene) {
        //here I'm creating all sprites (as usual)
        //below I add all sprites on the scene
        mEngine.runOnUpdateThread(new Runnable() {
                @Override
                public void run() {
                        if (isNight) {
                                getEngine().getScene().getLayer(0).addEntity(mBG);
                                getEngine().getScene().getLayer(2).addEntity(mStars);
                                getEngine().getScene().getLayer(3).addEntity(mSun);
                        }
                        getEngine().getScene().getLayer(1).addEntity(mComet);
                        getEngine().getScene().getLayer(4).addEntity(mTree);
                        getEngine().getScene().getLayer(5).addEntity(mGrass2);
                        getEngine().getScene().getLayer(6).addEntity(mGrass1);
                        getEngine().getScene().registerPostFrameHandler(handler);
                        if (isNight)
                                getEngine().getScene().registerPostFrameHandler(sunTimer);
                        getEngine().getScene().registerPostFrameHandler(grass1Timer);
                        getEngine().getScene().registerPostFrameHandler(grass2Timer);
                        getEngine().getScene().registerPostFrameHandler(cometTimer);
                 }
        });
}
user2166726
  • 53
  • 1
  • 6
  • I have also had very strange problems with GLES1 and adding and removing sprites from a live wallpaper. Was unable to resolve so far. Maybe there is something wrong with andengine not following lifecycle on live wallpaper. – Plastic Sturgeon Apr 10 '13 at 16:51
  • You don't have to detach all the sprite manually, you directly call mScene.detachChildren() method. – Siddharth Apr 12 '13 at 18:02

0 Answers0