2014-09-01 6 views
0

저는 cocos2dX 게임을 개발 중입니다. 나는 물리 시뮬레이션을 위해 box2d를 사용한다. 저는 원형 몸체와 직사각형 몸체를 추가하려고합니다. 여기 내 코드는box2d (cocos2dx)에서 원형 바디 포지셔닝이 작동하지 않습니다.

// Create circular sprite and body 
CCSprite* ball_sprite = CCSprite::create("ball.png"); 
this->addChild(ball_sprite); 

b2BodyDef ballBodyDef; 
ballBodyDef.type = b2_dynamicBody; 
ballBodyDef.position.Set(screenSize.width/PTM_RATIO, screenSize.height/2/PTM_RATIO);//im running it in an iphone retina and screensize is 640x960 
ballBodyDef.userData = ball_sprite; 
ball_body = _world->CreateBody(&ballBodyDef); 

b2CircleShape ballshape; 
ballshape.m_radius = BALL_SIZE/2; 

b2FixtureDef ballShapeDef; 
ballShapeDef.shape = &ballshape; 
ballShapeDef.density = 100.0f; 
ballShapeDef.friction = 0.5f; 
ballShapeDef.restitution = 0.7f; 
ball_body->CreateFixture(&ballShapeDef); 

// Create rectangular sprite and body 
CCSprite* block_sprite = CCSprite::create("HelloWorld.png"); 
this->addChild(block_sprite); 

b2BodyDef blockBodyDef; 
blockBodyDef.type = b2_staticBody; 
blockBodyDef.position.Set(0, screenSize.height/2/PTM_RATIO); 
blockBodyDef.userData = block_sprite; 
block_bodie = _world->CreateBody(&blockBodyDef); 

b2PolygonShape blockshape; 
blockshape.SetAsBox(B_WIDTH/PTM_RATIO,B_HEIGHT/PTM_RATIO); 
b2FixtureDef blockShapeDef; 
blockShapeDef.shape = &blockshape; 
blockShapeDef.density = 100.0f; 
blockShapeDef.friction = 0.5f; 
blockShapeDef.restitution = 0.7f; 
block_bodie->CreateFixture(&blockShapeDef); 

직사각형 바디는 예상대로 화면에 표시됩니다.

그러나 원형 몸체는 화면에 표시되지 않습니다.

업데이트 기능에서 원형 바디의 위치를 ​​인쇄 할 때 위치는 2000 년경 큰 숫자입니다.이 위치는 프로그램을 실행할 때마다 다릅니다.

직사각형 바디가 추가되지 않은 경우 (block_bodie-> CreateFixture (& blockShapeDef); 라인을 주석 처리하면) 원형 바디가 예상대로 화면에 표시됩니다.

내가 여기서 잘못하고있는 것은 무엇입니까?

미리 감사드립니다.

답변

1

이 두 몸체는 만들어 질 때 겹쳐 있습니까? 대개 직사각형이 정적이고 원이 동적이기 때문에 원형이 사각형에 밀려나는 것일 수 있습니다. 두 가지를 모두 만들었지 만 물리 시뮬레이션을 실행하는 월드 스텝 함수를 호출하지 않으면 화면에 둘 다 표시됩니다.

겹치지 않거나 적어도 겹치지 않게 만들거나 센서 중 하나를 만들거나 충돌 카테고리 및 마스크 비트를 설정하여 상호 작용하지 않도록 만들 수 있습니다.

물론, 나는 당신이 디버그 드로우 디스플레이를보고 있다고 가정하고 있습니다. 이것은 물리 엔진이 무엇을하는지 확실히 알 수있는 유일한 방법입니다.

관련 문제