Попытка убить ArrayList из badGuys с помощью ArrayList из пуль - PullRequest
0 голосов
/ 27 ноября 2011

Я собираюсь сделать простой космический захватчик типа шутера для Android, и у меня возникают проблемы с пулями, убивающими врагов. Я не так обеспокоен самой коллизией, но функции arrayList сбивают меня с толку. У меня есть массив списков пуль и еще одного плохого парня, каждый из которых имеет свои x и y позиции. Я пытаюсь сделать так, чтобы, если они сталкиваются, соответствующий плохой парень исчезает. К сожалению, когда я пытаюсь сделать это, я получаю принудительное закрытие, поэтому его действительно трудно отладить Вот соответствующий код:

В Bullet.class:

    public List<Placement> bulletsArray = new ArrayList<Placement>();
    public List<Placement> temp = new ArrayList<Placement>();
    public List<Integer> tempKill = new ArrayList<Integer>();

    public List<Integer> kill(List<Placement> badguys){
    for (int i = bulletsArray.size() ; i >= 0 ; i--){
        Placement bulletsBang = bulletsArray.get(i);
        for (int j = badguys.size(); j >=0 ; j--){
            Placement badGuys = badguys.get(j);
            if (bulletsBang.x == bulletsBang.y ){
                if (badGuys.x == bulletsBang.x && badGuys.y == bulletsBang.y){
                    tempKill.add(j);
                }
            }
        }
        //      tempKill.add(0); //Just using this to get something to work. 
        //      temp.add(bullets.get(i)); // should destroy the bullet when it hits.
    }
    return tempKill;
}

В World.class:

    public void update(float deltaTime) {
    if (gameOver)
        return;

    tickTime += deltaTime;

    while (tickTime > tick) {
        tickTime -= tick;
        bullet.advance();
        bullet.deleteExtra();

        slowDown++;
        if (slowDown == 2){
        badGuy.advance();
        slowDown = 0;
        }

        if (bullet.bulletsArray.size() > 0){
            badGuy.kill(bullet.kill(badGuy.badguys));
        }   
    }
}

Внутри BadGuy.class;

    public  List<Placement> badguys= new ArrayList<Placement>();
    public BadGuy (){
        for (int i = 0 ; i < 8; i++){
            if (i% 2 == 0 ){
                badguys.add(new Placement(1 + i, 0));//creates 3 rows of bad guys.
                badguys.add(new Placement(1 + i, 1));
                badguys.add(new Placement(1 + i, 2));
            }
        }
    }
    public void kill(List<Integer> die){
            for (int i = die.size() ; i >= 0 ; i --){
        badguys.remove(die.get(i));
        }
    }

Я могу убрать плохих парней, когда использую целое число. Но я хочу вернуть arrayList, чтобы убрать плохих парней, которых я закрыл.

1 Ответ

0 голосов
/ 27 ноября 2011

Ваш обратный цикл должен начинаться с размера () - 1.size () равен 1 после последнего элемента и будет выдавать исключение.

EDIT

Кроме того, я бы предложил, чтобы ваша процедура kill() возвращала List<Placement>, а не List<Integer>индексов.Это проще концептуально (по крайней мере для меня, YMMV) и BadGuy.kill() просто делает removeAll()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...