알려 주시기 바랍니다. 그것의 "내부"부분에 원 모양을 사용하고 "외부"부분에 체인 모양을 사용하십시오.
공이 튀어 오르는 것을 추가하려면 체인 모양에 "스파이크"를 사용해야합니다. 여기에 주요 생성 기능은 다음과 같습니다
이는 것처럼 보이는 것입니다
void MainScene::CreateBody()
{
const float32 INNER_RADIUS = 2.50;
const float32 OUTER_RADIUS = 3.0;
const float32 BALL_RADIUS = 0.1;
const uint32 DIVISIONS = 36;
Vec2 position(0,0);
// Create the body.
b2BodyDef bodyDef;
bodyDef.position = position;
bodyDef.type = b2_dynamicBody;
_body = _world->CreateBody(&bodyDef);
assert(_body != NULL);
// Now attach fixtures to the body.
FixtureDef fixtureDef;
fixtureDef.density = 1.0;
fixtureDef.friction = 1.0;
fixtureDef.restitution = 0.9;
fixtureDef.isSensor = false;
// Inner circle.
b2CircleShape circleShape;
circleShape.m_radius = INNER_RADIUS;
fixtureDef.shape = &circleShape;
_body->CreateFixture(&fixtureDef);
// Outer shape.
b2ChainShape chainShape;
vector<Vec2> vertices;
const float32 SPIKE_DEGREE = 2*M_PI/180;
for(int idx = 0; idx < DIVISIONS; idx++)
{
float32 angle = ((M_PI*2)/DIVISIONS)*idx;
float32 xPos, yPos;
xPos = OUTER_RADIUS*cosf(angle-SPIKE_DEGREE);
yPos = OUTER_RADIUS*sinf(angle-SPIKE_DEGREE);
vertices.push_back(Vec2(xPos,yPos));
xPos = OUTER_RADIUS*cosf(angle)*.98;
yPos = OUTER_RADIUS*sinf(angle)*.98;
vertices.push_back(Vec2(xPos,yPos));
xPos = OUTER_RADIUS*cosf(angle+SPIKE_DEGREE);
yPos = OUTER_RADIUS*sinf(angle+SPIKE_DEGREE);
vertices.push_back(Vec2(xPos,yPos));
}
vertices.push_back(vertices[0]);
chainShape.CreateChain(&vertices[0], vertices.size());
fixtureDef.shape = &chainShape;
_body->CreateFixture(&fixtureDef);
// Create some "spikes" for the ball to bounce off of.
// Start it spinning
_body->SetAngularVelocity(M_PI/8);
// NOW create a ball to bounce around inside...
bodyDef.position = Vec2((INNER_RADIUS+OUTER_RADIUS)/2,0);
_ballBody = _world->CreateBody(&bodyDef);
circleShape.m_radius = BALL_RADIUS;
fixtureDef.shape = &circleShape;
_ballBody->CreateFixture(&fixtureDef);
// Give it some velocity so it starts to bounce.
_ballBody->SetLinearVelocity(Vec2(-0.5,0.5));
}
:이 데모를 만들어
. 공에 약간의 초기 속도를주고 약간 바운스하지만 빠르게 외부에 붙습니다 (원심력?). 이 작업을하려면 공이 끝나기를 원할 때 우물/센서 지점에 "유치"할 때까지 잠시 튀어 오르게 공을 흥분 상태로 유지해야 할 것입니다.
또는 두 번째 체인 고정 장치를 외부 체인 안쪽에서 "부드럽게"사용할 수 있습니다. 다음 공을 정착 시키려면 그것을 제거하십시오. 어떤 룰렛을 사용하든 룰렛 공처럼 보이기를 원한다면 공이 조금 움직이게 할 때까지 공을 사용할 필요가 있습니다.
전체 프로젝트 (Cocos2d-x, C++)를 github here에 게시했습니다.
내 사이트의 Box2d에 대한 기사는 here에서 찾을 수 있습니다.
이 정보가 도움이 되었습니까?
휠 림을 만들기 위해 가장자리 또는 더 나은 체인 모양으로 만이 작업을 수행 할 수 있습니다. 100 개의 꼭지점이 필요하면 그렇게하십시오. – LearnCocos2D
당신이 모를 경우를 대비해 : 여러 체인 모양을 연결하여 임의로 복잡한 표면을 형성 할 수 있습니다. 단일 사슬 모양의 정점 수에 국한되지 않습니다. – LearnCocos2D