Java 数组。删除(0)删除多个元素

Java 数组。删除(0)删除多个元素,java,arrays,libgdx,Java,Arrays,Libgdx,我正在用LibGdx做一个滚动游戏 在render方法中,我从ArrayList获取一些数据 我以友好的方式将ArrayList添加到敌人,然后将其传递给一个在屏幕上迭代和绘制的方法。当整行在屏幕上不再可见时,该方法还处理删除整行的操作 因此,简而言之,我从这个数组中添加和删除了DINAMICALY项。 不幸的是,删除步骤似乎删除的内容比应该删除的多 下一步我将尝试输入一个有效代码,以便您能够更好地理解 public class Enemy extends ... implements .. {

我正在用LibGdx做一个滚动游戏

在render方法中,我从
ArrayList获取一些数据

我以友好的方式将ArrayList添加到
敌人
,然后将其传递给一个在屏幕上迭代和绘制的方法。当整行在屏幕上不再可见时,该方法还处理删除整行的操作

因此,简而言之,我从这个数组中添加和删除了DINAMICALY项。 不幸的是,删除步骤似乎删除的内容比应该删除的多

下一步我将尝试输入一个有效代码,以便您能够更好地理解

public class Enemy extends ... implements .. {
    [getters and setters]
}

public class GameRenderer {
    ...
    // Enemies
    ArrayList<ArrayList<Enemy>> enemies;
    ...

    private void drawEnemies(float delta) {

        // Get Enemy Array
        for (int i = 0; i < enemies.size(); i++) {

            for (Enemy enemy : enemies.get(i)) {
                drawEnemy(enemy, delta);
            }
        }

    }

    public void addEnemiesToArray(ArrayList<Enemy> enemiesRow) {
        enemies.add(enemiesRow);
    }
}

private boolean drawEnemy(Enemy enemy, float delta) {
    // get info from enemy and draw
    if (enemy.getY() <= 0)
        enemies.remove(0);
}
公共类扩展。。。实现。。{
[接球手和接球手]
}
公共类游戏渲染器{
...
//敌人
ArrayList敌人;
...
私人银行(浮动三角洲){
//获取敌人阵型
for(int i=0;i如果(敌方.getY()很可能同时添加和删除行,那么并发性问题?很难说没有看到实现

也考虑使用<代码> LIKEDLIST/CODE >,因为它对列表中间出现的删除操作进行了更好的优化。


集合#synchronizedList
可能有助于解决并发问题。

感谢@hoaz的宝贵建议

我已经找到了解决问题的方法,我处理了在渲染方法之外删除行的问题

在我的处理器类中:

    public void update(float delta) {

    [methods...]

    switch (mRace.getRaceState()) {

        case RUNNING:
            mRace.update(delta, 1);
            if (enemyReference.canSpawnNewLine() && enemyReference.getY() < 350) {
                enemyReference.setCanSpawnNewLine(false);
                spawnNewLine();
            }
            break;

    }

    mRenderer.render(mRace.getRaceState(), mRace.getOldRaceState(), delta);
}

public void spawnNewLine() {
    ArrayList<Enemy> enemies = getEnemiesArray(numOfEnemies(), 0);
    enemyReference = enemies.get(0);
    mRenderer.addEnemiesToArray(enemies);
}
// variable:
private ArrayList<Enemy> enemiesRef;
//变量:
私人ArrayList enemiesRef;
在更新方法中:

switch (mRace.getRaceState()) {

        case RUNNING:
            mRace.update(delta, 1);
            if (enemyReference.canSpawnNewLine() && enemyReference.getY() < 350) {
                enemyReference.setCanSpawnNewLine(false);
                spawnNewLine();
            }
            // This handle the removing
            if (enemiesRef.get(0).getEnd() <= 0) {
                mRenderer.removeFirst();
                enemiesRef.remove(0);
            }
            break;

    }
开关(mRace.getRaceState()){
案件审理:
mRace.update(delta,1);
if(enemyReference.canspawnewline()&&enemyReference.getY()<350){
enemyReference.setCanSpawnNewLine(false);
换行符();
}
//此手柄用于拆卸

如果(enemiesRef.get(0).getEnd(),您可以添加一些源代码,显示每个列表元素(行)的类型,如何创建并将其添加到列表中,然后解释如何知道除0之外的某个其他列表元素也已被删除。您是否尝试过使用调试器单步执行程序?
remove(0)
将只删除列表中的第一个元素,而不会删除任何其他元素。请看一看,我已重写了我的问题。很抱歉,这是漫长的一天