我正在使用 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);
}
});
}