gpt4 book ai didi

java - array.remove(0) 删除多个元素

转载 作者:行者123 更新时间:2023-11-29 04:48:32 25 4
gpt4 key购买 nike

我正在使用 LibGdx 开发滚动游戏。

在 render 方法中,我从 ArrayList<ArrayList<Enemy>> enemies; 中获取了一些数据

我动态地将 ArrayList 添加到 enemies ,然后我将它传递给一个在屏幕上迭代和绘制的方法。当整行在屏幕上不再可见时,该方法还会处理整行的删除。

因此,简而言之,我在此数组中动态添加和删除项目。不幸的是,似乎删除步骤删除的内容超出了应有的范围。

接下来我会尝试放一个有效的代码,以便您更好地理解。

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);
}

然后,一切都从 Processor 类调用:

    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);
}

我的问题是 drawEnemy 中的 enemies.remove(0) 方法删除的不仅仅是第一行,它一次删除 2 或 3 行。我该如何处理?

最佳答案

很可能同时添加和删除行,并发问题?没有看到实现很难说。

还可以考虑使用 LinkedList,因为它针对发生在列表中间的删除操作进行了更好的优化。

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

关于java - array.remove(0) 删除多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36314006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com