怎么能修复这个错误? “java.lang.IndexOutOfBoundsException”

我正在尝试用andengine library进行游戏。

当Sprite Enemy1Sprite到达相机的顶部,并且我将其分离时,抛出此exception:

 java.lang.IndexOutOfBoundsException Invalid Index 12 size is 12 

我必须分离enemy1Sprite因为它不断从相机中创建子弹精灵。

这是代码。

类敌1:

  package es.uah.juegomentos; import org.anddev.andengine.engine.handler.timer.ITimerCallback; import org.anddev.andengine.engine.handler.timer.TimerHandler; import org.anddev.andengine.entity.sprite.Sprite; import org.anddev.andengine.opengl.texture.region.TextureRegion; public class Enemy1 extends Sprite { boolean abajo = true; public Enemy1(TextureRegion pTextureRegion) { super(0, 0, pTextureRegion); this.setPosition(JuegoMentosActivity.RANDOM.nextInt(JuegoMentosActivity.CAMERA_WIDTH), -10); TimerHandler Enemy1fire = new TimerHandler(0.75f, true, enemigo1fireCallback); JuegoMentosActivity.getmGameScene().registerUpdateHandler(Enemy1fire); } @Override protected void onManagedUpdate(float pSecondsElapsed) { super.onManagedUpdate(pSecondsElapsed); float y = getY(); if (y >= 275) {abajo = false;} if (abajo) {y = y + pSecondsElapsed * 125.0f;} else {y = y - pSecondsElapsed * 125.0f;} this.setPosition(getX(), y); if (getY()<-10){this.getParent().detachChild(this);} } ITimerCallback enemigo1fireCallback = new ITimerCallback(){ @Override public void onTimePassed(TimerHandler pTimerHandler) { bala1 mbala1; mbala1 = new bala1(getX()+(64*1/2),getY()+64,JuegoMentosActivity.getMbala1Texture().getTextureRegion(),true); JuegoMentosActivity.getmGameScene().attachChild(mbala1); } }; } 

在场景中创建新的敌人:

  //Creamos el sprite del enemigo uno ITimerCallback enemigo1CreatorCallback = new ITimerCallback(){ @Override public void onTimePassed(TimerHandler pTimerHandler) { mEnemy1Sprite = new Enemy1(mEnemy1Texture.getTextureRegion()); mGameScene.attachChild(mEnemy1Sprite); } }; TimerHandler Enemy1Creator = new TimerHandler(3.0f, true, enemigo1CreatorCallback); mGameScene.registerUpdateHandler(Enemy1Creator); 

谢谢

你真的已经回答了你自己的问题 – 马塞洛是正确的,问题不在你发布的代码中,而是你在做的detachChild调用 – 你需要在更新线程上调用它,如在

 runOnUpdateThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub yourScene.detachChild(yourEnemySprite); } }); 

这表示您的实际数组大小为12,因此您的最后一个索引是11.但是您尝试访问不存在的索引12。 尝试找出引发此错误的行。 if size of index is >= size of array brake那里制造一个条件。

您也可以尝试使用try{}catch(IndexOutOfBondException e){}并继续该过程。

在onManagedUpdate场景中分离实体。