私はLibGdxでスクロールゲームをしています。array.remove(0)複数の要素を削除しています
はrenderメソッドでは、私はその後、私は反復処理し、画面上に描画メソッドに渡し、私はdinamically enemies
にArrayListのを追加ArrayList<ArrayList<Enemy>> 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);
}
私の問題はenemies.remove(0)drawEnemy
における方法は、最初の行以上を削除、それは2又は3を除去することです行を一度に表示します。これをどうすれば処理できますか?
あなたは、各リスト要素(行)は、あなたがそれを作成&追加方法を、何であるかの種類を示すいくつかのソースコードを追加することができますそれをリストに追加し、0以外の特定のリスト要素も削除されていることをどのように知っているかを説明します。 –
デバッガでプログラムをステップ実行しようとしましたか? 'remove(0)'はリストの最初の要素だけを削除し、他の要素は削除しません。 –
http://stackoverflow.com/help/mcve –