cocos2d + box2d应用程序冻结/停止

时间:2014-06-28 22:40:13

标签: ios iphone cocos2d-iphone box2d

我的cocos2d + box2d应用程序有时冻结/停止。从调试器暂停从b2World.cpp获取此行。这是什么意思?也许我的contactlistener有问题,没有它应用程序在正常模式下工作。

**// Clear all the island flags.
for (b2Body* b = m_bodyList; b; b = b->m_next)
{
    b->m_flags &= ~b2Body::e_islandFlag;**

我的contactlistener。检测碰撞 - >检查过滤器 - > push_back(body) - >将body添加到destroyArray中 - >在更新方法中的timetep之后销毁体。

std::vector<b2Body *>toEat;
std::vector<MyContact>::iterator pos3;
for (pos3 = _contactListener->_contacts.begin(); pos3 != _contactListener->_contacts.end(); ++pos3) {
MyContact contact = *pos3;

b2Body *bodyA = contact.fixtureA->GetBody();
b2Body *bodyB = contact.fixtureB->GetBody();

if (bodyA->GetUserData() != NULL & bodyB->GetUserData() != NULL) {

b2Fixture *fixtureA = bodyA->GetFixtureList();

b2Filter filterA = bodyA->GetFixtureList()[0].GetFilterData();
b2Filter filterB = bodyB->GetFixtureList()[0].GetFilterData();

//some filter stuff

if (filter == my filter) {

toEat.push_back(bodyB);

   }
  }
}


std::vector<b2Body *>::iterator pos4;
for(pos4 = toEat.begin(); pos4 != toEat.end(); ++pos4) {
    b2Body *body = *pos4;
    if (body->GetUserData() != NULL) {

        CCPhysicsSprite *sprite = (CCPhysicsSprite*)body->GetUserData();
        [self removeChild:sprite cleanup:YES];
        body->SetActive(false);
        [bodiesForDestroy addObject:[NSValue valueWithPointer:body]];
    }
}

Found this link, same issue

0 个答案:

没有答案
相关问题