如何修复此错误&引用;java.lang.IndexOutOfBoundsException“;
我想用如何修复此错误&引用;java.lang.IndexOutOfBoundsException“;,java,android,andengine,Java,Android,Andengine,我想用和引擎库做一个游戏 当精灵Enemy1Sprite到达相机顶部,我将其分离时,会引发此异常: java.lang.IndexOutOfBoundsException Invalid Index 12 size is 12 我必须拆下enemy1Sprite,因为它一直在相机外创建子弹精灵 这是代码 类enemy1: 谢谢您已经回答了您自己的问题-Marcelo是正确的,问题不在您发布的代码中,而是在您执行detachChild调用的地方-您需要在更新线程中调用它,如 runOnUpdat
和引擎库做一个游戏
当精灵Enemy1Sprite
到达相机顶部,我将其分离时,会引发此异常:
java.lang.IndexOutOfBoundsException Invalid Index 12 size is 12
我必须拆下enemy1Sprite
,因为它一直在相机外创建子弹精灵
这是代码
类enemy1:
谢谢您已经回答了您自己的问题-Marcelo是正确的,问题不在您发布的代码中,而是在您执行detachChild调用的地方-您需要在更新线程中调用它,如
runOnUpdateThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
yourScene.detachChild(yourEnemySprite);
}
});
这表示实际数组大小是12,所以最后一个索引是11。但您正在尝试访问不存在的索引12。尝试找出引发此错误的行。在那里设置一个条件,即如果索引的大小为>=阵列制动器的大小
您也可以尝试使用
try{}catch(IndexOutOfBondException e){}
并继续此过程。在onManagedUpdate of scene中分离实体。您是否考虑过发布实际引发异常的代码部分?当你在做的时候,完整的异常堆栈?顺便说一句,谷歌快速搜索会告诉你,大小为12的数组的最后一个索引实际上是11,因为数组索引在Java中是基于0的。这个答案听起来可能是正确的。但是,还有一个你可能喜欢的函数:detachSelf();而不是这个.getParent().detachChild(这个);您可能需要详细说明一下。这看起来像是一个评论,而不是一个答案。
//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);
runOnUpdateThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
yourScene.detachChild(yourEnemySprite);
}
});