Можно ли изменить 2-3 раза f-> SetSensor ()? - PullRequest
1 голос
/ 22 мая 2010

я использую cocos2d-iphone-0.99.2 и встроил в него box2d. у меня есть 2 вида спрайтов с тегами 1 и 2. Также я создал тела и определения формы для них. то, что я пытаюсь сделать, это заставить виды sprite1 действовать как сплошные или не сплошные, когда sprite2 сталкивается с ними. я попробовал этот код:

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) 
{    
  if (b->GetUserData() != NULL) 
    {
      CCSprite *sprite = (CCSprite *)b->GetUserData();     
        if (sprite.tag == 1) 
        {
            b2Fixture* f = b->GetFixtureList();
            f->SetSensor(solid);
        }
    }
}

Где твердое тело - bool. В первый раз, когда я заменяю прибор на датчик, все в порядке, но когда я пытаюсь вернуться и снова перейти в сплошное состояние, мое приложение вылетает со следующей ошибкой: Ошибка подтверждения: (manifold-> pointCount> 0), функция b2ContactSolver, файл /Documents/myapp/libs/Box2D/Dynamics/Contacts/b2ContactSolver.cpp, строка 58.

Можно ли как-то несколько раз поменять крепеж -> SetSensor и если да ... как? Любая помощь высоко ценится.

1 Ответ

1 голос
/ 05 октября 2010

Хорошо ... ответ таков: приборы хранятся в массивах, так что если у вас есть только 1 прибор на смену корпуса, это будет выглядеть так:

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()){if (b->GetUserData() != NULL) 
{
  CCSprite *sprite = (CCSprite *)b->GetUserData();     
    if (sprite.tag == 1) 
    {
        b2Fixture* f = b->GetFixtureList();
        f[0]->SetSensor(solid);
    }
}

}

...