1

我正在使用 AndEngine GLES1 创建动态壁纸,当我的 lwp 启动时有时会出现错误:java.lang.IndexOutOfBoundsException: Invalid index 4 size is 4. 我知道,应该在 runOnUpdateThread 中附加和分离精灵,但是如何有几个精灵?我的代码不能正常工作,恢复后并非所有精灵都加载:

//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);
                 }
        });
}
4

0 回答 0