2012-02-05 2 views
0

Box2D (iOS 기반)에이 매우 이상한 문제가 있습니다. 나는 화면의 바닥에 몸을 숨기고있다. 몸체를 b2_dynamicBody에서 body->SetType(b2_staticBody)을 사용하여 b2_dynamicBody로 설정 한 다음 나중에 다시 밀어 넣기 전에 화면 아래쪽으로 내려갑니다 (여러 프레임이 움직이는 것을 볼 수 있듯이). 바닥과 올바르게 휴식합니다.세계를 빠져 나가는 Box2D 도형

이 동작은 화면 맨 아래에서만 발생하는 것으로 보입니다. 서로 다른 몸에 앉아있는 것과 똑같은 일을하는 것은 이러한 행동을 초래하지 않습니다.

내가 (screenRect의가 이미되어 세계 공간으로 조정) 화면의 가장자리를 다음과 같이 정의하고있다 :

b2BodyDef groundBodyDef; 
groundBodyDef.position.Set(0,0); 
b2Body* groundBody = globalWorld->CreateBody(&groundBodyDef); 
b2PolygonShape groundBox; 
b2FixtureDef boxShapeDef; 
boxShapeDef.shape = &groundBox; 
groundBox.SetAsEdge(b2Vec2(screenRect.p1.x,screenRect.p1.y), b2Vec2(screenRect.p2.x,  screenRect.p1.y)); 
groundBody->CreateFixture(&boxShapeDef); 
groundBox.SetAsEdge(b2Vec2(screenRect.p1.x,screenRect.p1.y), b2Vec2(screenRect.p1.x, screenRect.p2.y)); 
groundBody->CreateFixture(&boxShapeDef); 
groundBox.SetAsEdge(b2Vec2(screenRect.p1.x,screenRect.p2.y), b2Vec2(screenRect.p2.x, screenRect.p2.y)); 
groundBody->CreateFixture(&boxShapeDef); 
groundBox.SetAsEdge(b2Vec2(screenRect.p2.x,screenRect.p2.y), b2Vec2(screenRect.p2.x,  screenRect.p1.y)); 
groundBody->CreateFixture(&boxShapeDef); 

이의 이상한 부분은 더 나는 먼 정적 동적에서 몸을 전환이다 더 멀리 떨어지면 다시 밀어 넣기 전에 바닥을 통과합니다.

나는 동적 인 것에서부터 정적 인 것까지 제외하고 몸에서 다른 것을 바꾸지 않았다. 시체를 움직여 다시 바닥으로 떨어 뜨리면 동적에서 정적으로 전환되고 다시 바닥으로 떨어지는 정도가 재설정되지만 다시 전환 할수록 다시 생성됩니다.

잘못 작성하는 경우가 아니면 왜 이렇게 바닥에 떨어지는 지 알 수 없습니다. 게임의 다른 모든 것들이 완벽하게 작동합니다.

답변

0

이 문제도 발생했습니다. 여기에 제 이론이 있습니다 : 물체가 정적 일 때, 그것은 땅과 같은 다른 정적 인 것들과의 접촉을 생성하는 것을 멈 춥니 다. 동적으로 다시 설정하면이 연락처 확인을 업데이트하지 못하는 것 같습니다.

내 솔루션은 다음과 같습니다. 개체의 위치를 ​​변경하면 이러한 연락처가 올바르게 업데이트되므로 개체를 현재 위치로 옮깁니다. 불행히도, 그것은 제로 변화로 감지됩니다. 그래서 다른 곳으로 옮겨야하고 이전 위치로 다시 이동해야합니다.

b2Vec2 pos = body.getPosition(); 
float ang = body.getAngle(); 
b2Vec2 off_map(-100,-100); 
body.setPositionAndAngle(off_map, 0); 
body.setPositionAndAngle(pos, ang); 

오프 맵 영역이없는 경우 첫 번째 이동 중에 개체를 비활성화 할 수 있습니다.