C ++ Box2D通过正文向量和删除迭代

时间:2015-04-27 17:44:44

标签: c++ vector box2d fixture

我创造了一个游戏,它使用彩色编码图像来创建不同的身体/装置。因此,例如,如果像素是红色,它将作为7存储到数组中,然后程序将创建一个名为jewel的主体。如果有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 个答案:

没有答案