我试图在屏幕达到一定高度时将其移除。我的渲染方法如下。代码的所有其他部分似乎都有效,但是当项目达到指定的高度时,不会删除它们并渲染下一帧,而是显示错误。
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();
答案 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();
}
}
}