Как мне сбросить местоположение спрайта, когда он привязан к телу? - PullRequest
0 голосов
/ 01 сентября 2011

Я использую пул для управления пулями в моей игре. Единственная проблема заключается в том, что пуля получена из пула, который был только что переработан, потому что он был вовлечен в столкновение, хотя местоположение его тела сбрасывается с помощью 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;
            }
        }
    }
}

1 Ответ

0 голосов
/ 01 сентября 2011

Мне было бы интересно посмотреть, что вы делаете во время вызова onHandleObtainItem, чтобы получить пулю из пула.

Не имеет ли смысла устанавливать позицию спрайта на какой-то закадровый экран?значение когда вы вызываете onHandleRecycleItem, что-то вроде:

@Override
protected void onHandleRecycleItem(final Bullet pBullet) {
    pBullet.disable();
    pBullet.getSprite().setPosition(-1, -1);
}
...