Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios cocos2d+;box2d应用程序冻结/停止_Ios_Iphone_Cocos2d Iphone_Box2d - Fatal编程技术网

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

Ios cocos2d+;box2d应用程序冻结/停止,ios,iphone,cocos2d-iphone,box2d,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;** 我的听众。检测碰撞->检查过滤器

我的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;**
我的听众。检测碰撞->检查过滤器->推回(主体)->将主体添加到destroyArray->在更新方法的时间步后销毁主体

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]];
    }
}
std::vectoreat;
std::vector::迭代器pos3;
对于(pos3=_contactListener->_contacts.begin();pos3!=_contactListener->_contacts.end();++pos3){
MyContact contact=*pos3;
b2Body*bodyA=contact.fixtureA->GetBody();
b2Body*bodyB=contact.fixtureB->GetBody();
如果(bodyA->GetUserData()!=NULL&bodyB->GetUserData()!=NULL){
b2Fixture*fixtureA=bodyA->GetFixtureList();
b2Filter filterA=bodyA->GetFixtureList()[0]。GetFilterData();
b2Filter filterB=bodyB->GetFixtureList()[0]。GetFilterData();
//一些过滤材料
如果(过滤器==我的过滤器){
脚趾向后推(身体B);
}
}
}
std::vector::迭代器pos4;
for(pos4=toEat.begin();pos4!=toEat.end();++pos4){
b2Body*body=*pos4;
如果(body->GetUserData()!=NULL){
ccphysisprite*sprite=(ccphysisprite*)body->GetUserData();
[自移除儿童:精灵清理:是];
body->SetActive(假);
[bodiesForDestroy添加对象:[NSValue valueWithPointer:body]];
}
}

好的。我解决了。如果一个带精灵的小身体飞离屏幕这么远而没有被摧毁,你会得到这个可怕的错误。我真的怀疑这是问题的真正原因-也许你只是通过稍微改变一些内部状态来掩盖它。我的猜测是,你两次破坏同一个物体,因为脚趾向量可能包含重复的物体。尝试使用std::set而不是std::vector.iforce2d,你是对的!昨天,我为可销毁实体更改了一种数组类型(NSMutableArray为NSMutableOrderedSet)。