Я использую пул для управления пулями в моей игре. Единственная проблема заключается в том, что пуля получена из пула, который был только что переработан, потому что он был вовлечен в столкновение, хотя местоположение его тела сбрасывается с помощью Body.setTransform()
, когда оно инициализируется, местоположение спрайта пули (которое используется для обнаружения столкновений). использование Sprite.collidesWith(otherSprite)
) сбрасывается недостаточно быстро (так как оно обновляется в потоке физики). Это означает, что вновь созданная пуля вызывает столкновение в момент ее создания, в результате чего одна пуля вызывает более одного столкновения.
Я пытался вызвать Bullet.sprite.setPosition(0,0)
, когда он инициализируется, но это явно мешает, так как пули вообще не отображаются с этой строкой кода на месте. Что я должен сделать, чтобы предотвратить эту проблему?
Создание пули:
bullets[bulletCounter] = bulletPool.obtainPoolItem();
bullets[bulletCounter].getBody().setTransform(shipBody.getTransform().getPosition(),0);
bullets[bulletCounter].getBody().setLinearVelocity(shipBody.getLinearVelocity());
bullets[bulletCounter].activate();
Обнаружение столкновения:
for(int i = 0; i < BULLET_MAX; i++){
if(bullets[i] != null && bullets[i].isActive()){
for(int j = 0; j < enemies.size(); j++){
//check for collision!
if(bullets[i].getSprite().collidesWith(enemies.get(j).getSprite())){
//-snip-
break;
}
}
}
}