LibGDX-在碰撞时从屏幕上移除项目

时间:2015-04-29 05:30:24

标签: android libgdx

我试图在屏幕达到一定高度时将其移除。我的渲染方法如下。代码的所有其他部分似乎都有效,但是当项目达到指定的高度时,不会删除它们并渲染下一帧,而是显示错误。

    batch.begin();
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    t = Gdx.graphics.getDeltaTime();
    time += t;
    speed = 300;

    if (time >= ((height / speed)/4)) {
        time = 0;
        onScreenQueue.add(spawnBlock(speed));
    }
    batch.draw(new TextureRegion(square.getTexture()),square.getPosX(), square.pos.y, padding, padding);

    for (Shapes i : onScreenQueue) {

        batch.draw(new TextureRegion(i.getTexture()), i.pos.x, i.pos.y -= speed * t, padding, padding);

        if (i.pos.y <= H) {
            if(i.getSide() == square.getSide()){
                onScreenQueue.remove(i);
            }
        }

    }
    batch.end();

1 个答案:

答案 0 :(得分:2)

这是因为您正在从列表中删除项目,同时迭代它。 这导致ConcurrentModificationException 为避免这种情况,您可以使用Iterator

    for (Iterator<Shape> iterator = onScreenQueue.iterator(); iterator.hasNext();) {
        Shape i = iterator.next();
        batch.draw(new TextureRegion(i.getTexture()), i.pos.x, i.pos.y -= speed * t, padding, padding);

        if (i.pos.y <= H) {
            if(i.getSide() == square.getSide()){
                iterator.remove();
            }
        }
    }