Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复此错误&引用;java.lang.IndexOutOfBoundsException“;_Java_Android_Andengine - Fatal编程技术网

如何修复此错误&引用;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);
}
});