Почему я не получаю One Bullet One Hit? - PullRequest
2 голосов
/ 31 августа 2011

В моем коде обнаружения столкновения пули деактивируются после того, как они попали в столкновение:

for(int j = 0; j < enemies.size(); j++){
    //check for collision
    if(bullets[i].isActive() && bullets[i].getSprite().collidesWith(enemies.get(j).getSprite())){

        //remove bullet  
        removeBullet(i); //bullet is deactivated here, .isActive() will return false

        if(enemies.get(j).damage(1)){
            // --snip--
        }
        break;
    }
}

Единственное место, где пули деактивированы, находится в этом разделе кода.Единственное место, где они активируются, это когда они созданы.

Несмотря на это, пуля будет наносить урон несколько раз.removeBullet() запускает анимацию взрыва, которая воспроизводится несколько раз.Что может быть не так?

Обновление

Вот removeBullet()

private void removeBullet(int i){
    if(bullets[i] == null) return;
    bullets[i].deactivate();
    makeSmallExplosion(bullets[i].getSprite().getX(),bullets[i].getSprite().getY());
    bulletPool.recyclePoolItem(bullets[i]);
    bullets[i] = null;
}

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Может быть запущено более одного потока?Кроме того, это не может быть проблемой с удалением пули.Но есть несколько пуль в этой позиции и / или враги?

0 голосов
/ 31 августа 2011

Ah AndEngine; Я на самом деле мод на форуме:)

Я написал этот блог о пулах объектов на тот случай, если вам нужно проверить, как вы реализовали свой: http://c0deattack.wordpress.com/category/programming/andengine/

Интересно, правильно ли вы утилизируете пулю?

...