C ++ Box2D Итерация по вектору тел и удаление

Я создал игру, которая использует изображение с цветовой кодировкой для создания различных корпусов / приспособлений. Так, например, если пиксель красный, он будет сохранен в массиве как 7, а затем программа создаст тело, называемое драгоценным камнем. Если будет 10 красных пикселей, будет создано 10 драгоценных камней:

                    else if (array[w][h]==7)
{
b2BodyDef Jewel_BodyDef;
Jewel_BodyDef.position.Set(x, y);
m_collectableJewel = m_world->CreateBody(&Jewel_BodyDef);
b2PolygonShape box;
box.SetAsBox(0.5f, 0.5f);
m_collectableJewelFixture=m_collectableJewel->CreateFixture(&box, 0.0f);
collide.m_jewelFix.push_back(m_collectableJewelFixture);
jewels a;
a.jewel_dim.set(1.0f,1.0f);
a.jewel_pos.set(x,y);
m_jewels.push_back(a);
x+=5.0f;
}

Моя проблема заключается в расчете столкновения между игроком и драгоценными камнями. Программа знает, когда игрок столкнулся с драгоценным камнем. Тем не менее, я не могу заставить его удалить прибор. Вернее, он удалит только последний установленный прибор, то есть последний, который будет создан в векторе. Есть ли способ назвать приборы индивидуально? Чтобы программа могла удалить тот, с которым она фактически столкнулась, а не последний?

редактировать:

int Collision_with_Player::PickJewel(b2Fixture *player, b2Fixture *foot)
{
int CollisionJewel=0;
std::vector<MyContact>::iterator posi;
for(posi = m_contactListener->m_contacts.begin(); posi != m_contactListener->m_contacts.end(); ++posi)
{
MyContact contact = *posi;
for(std::vector<b2Body*>::iterator iterb = m_jewelBodyVec.begin(); iterb != m_jewelBodyVec.end(); ++iterb)
{
for(std::vector<b2Fixture*>::iterator iter = m_jewelFix.begin(); iter != m_jewelFix.end(); ++iter)
{
if ((contact.fixtureA == player && contact.fixtureB == *iter) ||
(contact.fixtureA ==*iter && contact.fixtureB == player))
{
m_deleteJewels.clear();
std::cout<<"size"<<m_deleteJewels.size()<<std::endl;
CollisionJewel=1;
std::cout<<"Jewel"<<*iter<<std::endl;
deletejewel = *iter;
deletejewelbody= *iterb;

}
else
{
CollisionJewel=0;
}
}
}
}
return CollisionJewel;
}

и в другом файле

    if (collide.PickJewel(m_playerFixture, m_footSensorFixture)==1)
{
collide.deletejewelbody->DestroyFixture(collide.deletejewel);

}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]