【发布时间】:2016-03-30 15:57:47
【问题描述】:
我正在使用 LibGdx 开发一款滚动游戏。
在渲染方法中,我从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);
}
然后,一切都从处理器类中调用:
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 中的enemys.remove(0) 方法删除的不止第一行,它一次删除2 或3 行。我该如何处理?
【问题讨论】:
-
您能否添加一些源代码,显示每个列表元素(行)是什么类型,如何创建它并将其添加到列表中,然后解释您如何知道除了某个其他列表元素0 也已被删除。
-
您是否尝试过使用调试器单步执行您的程序?
remove(0)只会删除列表的第一个元素,而不会删除任何其他元素。 -
请看一下,我已经重写了我的问题。对不起,这是漫长的一天