并发访问List

时间:2015-05-24 22:24:26

标签: java multithreading libgdx concurrent-programming

我试图制作一个类似塞尔达的""用Libgdx在Java中进行游戏。因为我的播放器会有很多其他的东西,我试图使用Threads(例如:对于敌人)。 但是,我有一个例外,我找不到解决方案:

  

线程中的异常"侵权1"线程中的例外情况"侵权2" > com.badlogic.gdx.utils.GdxRuntimeException:#iterator()不能嵌套使用。     at com.badlogic.gdx.utils.Array $ ArrayIterator.hasNext(Array.java:523)     在com.defel.game.entite.ennemi.Ennemi.deplacementAleatoire(Ennemi.java:368)     在com.defel.game.entite.ennemi.Ennemi.run(Ennemi.java:234)

有关的代码是:

private synchronized void deplacementAleatoire(){
    animationCourante = animationMarche[direction];

    boolean bloquer = false;

    for (MapObject obj : InfosSingleton.getInstance().getCollisionObjects()) {
        RectangleMapObject rectMapObject = (RectangleMapObject) obj;
        Rectangle rectObject = rectMapObject.getRectangle();

        if(Intersector.overlaps(rectObject, rectangleColl)){
            bloquer = true;
        }
    }

    if(bloquer){
        switch (direction) {
        case 0:
            direction = 2;
            break;
        case 1:
            direction = 3;
            break;
        case 2:
            direction = 0;
            break;
        case 3:
            direction = 1;
            break;

        default:
            break;
        }
    } 

    switch (direction) {
    case 0:
        rectangle.setY(rectangle.getY() + 2);
        rectangleColl.setY(rectangleColl.getY() + 2);
        break;
    case 1:
        rectangle.setX(rectangle.getX() - 2);
        rectangleColl.setX(rectangleColl.getX() - 2);
        break;
    case 2:
        rectangle.setY(rectangle.getY() - 2);
        rectangleColl.setY(rectangleColl.getY() - 2);
        break;
    case 3:
        rectangle.setX(rectangle.getX() + 2);
        rectangleColl.setX(rectangleColl.getX() + 2);
        break;

    default:
        break;
    }
}

我认为我的帖子无法同时访问列表,但我不知道如何解决它...

你知道吗?谢谢= D

0 个答案:

没有答案