Android 使用Andengine的游戏中出现意外的arrayIndexOutofBound异常

Android 使用Andengine的游戏中出现意外的arrayIndexOutofBound异常,android,andengine,game-engine,game-physics,Android,Andengine,Game Engine,Game Physics,我正在安德林做游戏。一辆汽车从下到上(穿过马路),许多汽车正穿过马路。我想通过触摸和破坏其他汽车来拯救这辆车。我可以得到碰撞。但当我触摸并摧毁其他汽车时,在摧毁了两三辆汽车后,我会得到一个异常的Bond排列。有什么问题吗?提前谢谢 Iterator<Sprite> targets; public void addTarget() { Random rand = new Random(); int x = (int) mCamera.getWidth() + mT

我正在安德林做游戏。一辆汽车从下到上(穿过马路),许多汽车正穿过马路。我想通过触摸和破坏其他汽车来拯救这辆车。我可以得到碰撞。但当我触摸并摧毁其他汽车时,在摧毁了两三辆汽车后,我会得到一个异常的Bond排列。有什么问题吗?提前谢谢

Iterator<Sprite> targets;


public void addTarget() {

    Random rand = new Random();
    int x = (int) mCamera.getWidth() + mTargetTextureRegion.getWidth();
    int minY = mTargetTextureRegion.getHeight();
    int maxY = (int) (mCamera.getHeight() - mTargetTextureRegion
            .getHeight());
    int rangeY = maxY - minY;
    int y = rand.nextInt(rangeY) + minY;
    Sprite target = new Sprite(x, y, mTargetTextureRegion.deepCopy()) {
        @Override
        public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
                float pTouchAreaLocalX, final float pTouchAreaLocalY) {

            System.out.println("Touched");
             removeSprite(this, targets);

            count--;

            return mChildrenIgnoreUpdate;

        }
    };
    mMainScene.registerTouchArea(target);
    mMainScene.setTouchAreaBindingEnabled(true);

    mMainScene.attachChild(target);
    int minDuration = 10;
    int maxDuration = 20;
    int rangeDuration = maxDuration - minDuration;
    int actualDuration = rand.nextInt(rangeDuration) + minDuration;
    MoveXModifier mod = new MoveXModifier(actualDuration, target.getX(),
            -target.getWidth());
    target.registerEntityModifier(mod.deepCopy());
    TargetsToBeAdded.add(target);

}

public void removeSprite(final Sprite _sprite, Iterator it) {
    runOnUpdateThread(new Runnable() {
        @Override
        public void run() {
            mMainScene.detachChild(_sprite);
        }
    });
    it.remove();
}

private void createSpriteSpawnTimeHandler() {
    if (count <= 2) {
        TimerHandler spriteTimerHandler;
        float mEffectSpawnDelay = 1f;
        spriteTimerHandler = new TimerHandler(mEffectSpawnDelay, true,
                new ITimerCallback() {
                    @Override
                    public void onTimePassed(TimerHandler pTimerHandler) {

                        count++;
                        addTarget();

                    }
                });

        getEngine().registerUpdateHandler(spriteTimerHandler);
    }
}

IUpdateHandler detect = new IUpdateHandler() {
    @Override
    public void reset() {
    }

    @Override
    public void onUpdate(float pSecondsElapsed) {
        targets = targetLL.iterator();
        Sprite _target;
        while (targets.hasNext()) {
            _target = targets.next();
            if (_target.getX() <= -_target.getWidth()) {
                removeSprite(_target, targets);
            }

            if (_target.collidesWith(player)) {
                System.out.println("Collission occured");
                // break;

            }

        }
        targetLL.addAll(TargetsToBeAdded);
        TargetsToBeAdded.clear();
    }
};   
迭代器目标;
public void addTarget(){
Random rand=新的Random();
int x=(int)mCamera.getWidth()+mTargetTextureRegion.getWidth();
int minY=mTargetTextureRegion.getHeight();
int maxY=(int)(mCamera.getHeight()-mTargetTextureRegion
.getHeight());
int rangy=maxY-minY;
int y=rand.nextInt(range y)+minY;
精灵目标=新精灵(x,y,mTargetTextureRegion.deepCopy()){
@凌驾
公共布尔OnRealTouched(最终触摸事件pSceneTouchEvent,
浮点值pTouchAreaLocalX,最终浮点值pTouchAreaLocalY){
System.out.println(“触摸”);
removeSprite(此,目标);
计数--;
返回mChildrenIgnoreUpdate;
}
};
mMainScene.registerTouchArea(目标);
mMainScene.setTouchAreaBindingEnabled(true);
mmainsene.attachChild(目标);
智力持续时间=10;
int maxDuration=20;
int rangeDuration=maxDuration-minDuration;
int actualDuration=rand.nextInt(rangeDuration)+minDuration;
MoveXModifier mod=新的MoveXModifier(实际持续时间,target.getX(),
-target.getWidth());
target.registerEntityModifier(mod.deepCopy());
targetstobeaded.add(目标);
}
public void removeSprite(最终精灵_精灵,迭代器){
runOnUpdateThread(新的Runnable(){
@凌驾
公开募捐{
更新世儿童(_sprite);
}
});
it.remove();
}
私有void createSpriteSpawnTimeHandler(){

如果(count它主要发生在游戏的更新线程中,这是由于分离子调用。我所做的是用try-catch包围mupdate处理程序。我没有时间解决这个问题:)

它主要发生在游戏的更新线程中,这是由于分离子调用。我所做的是用try-catch围绕mupdate处理程序。我没有时间解决这个问题:)