临时文件

FooTest()
{
    b2BodyDef          myBodyDef;
    myBodyDef.type     = b2_dynamicBody;     // this will be a dynamic body
    myBodyDef.position.Set(-10, 20);     // a little to the left

    b2Body* dynamicBody1 = m_world->CreateBody(&myBodyDef);
};


b2CircleShape     circleShape;
circleShape.m_p.Set(0, 0);     // position, relative to body position
circleShape.m_radius = 1;     // radius

b2FixtureDef myFixtureDef;
myFixtureDef.shape = &circleShape;               // this is a pointer to the shape above
dynamicBody1->CreateFixture(&myFixtureDef);     // add a fixture to the body

b2Vec2 vertices[5];
vertices[0].Set(-1,  2);
vertices[1].Set(-1,  0);
vertices[2].Set( 0, -3);
vertices[3].Set( 1,  0);
vertices[4].Set( 1,  1);

b2PolygonShape polygonShape;
polygonShape.Set(vertices, 5);                         // pass array to the shape

myFixtureDef.shape = &polygonShape;                    // change the shape of the fixture
myBodyDef.position.Set(0, 20);                         // in the middle
b2Body* dynamicBody2 = m_world->CreateBody(&myBodyDef);
dynamicBody2->CreateFixture(&myFixtureDef);          // add a fixture to the body

polygonShape.SetAsBox(2, 1);                         // a 4x2 rectangle
myBodyDef.position.Set(10,20);                         // a bit to the right

b2Body*          dynamicBody3 = m_world->CreateBody(&myBodyDef);
dynamicBody3->CreateFixture(&myFixtureDef);          // add a fixture to the body

myBodyDef.type = b2_staticBody;                                   // change body type
myBodyDef.position.Set(0,0);                                   // middle, bottom

polygonShape.SetAsEdge( b2Vec2(-15,0), b2Vec2(15,0) );     // ends of the line
b2Body* staticBody = m_world->CreateBody(&myBodyDef);
staticBody->CreateFixture(&myFixtureDef);                    // add a fixture to the body


b2EdgeShape edgeShape;
edgeShape.Set(b2Vec2(-15,0), b2Vec2(15,0));

myFixtureDef.shape = &edgeShape;

b2FixtureDef myFixtureDef;
// ...
myFixtureDef.density = 1; //new code

// for the custom polygon, add 10 to each x-coord
vertices[0].Set(-1 +10,  2);
vertices[1].Set(-1 +10,  0);
vertices[2].Set( 0 +10, -3);
vertices[3].Set( 1 +10,  0);
vertices[4].Set( 1 +10,  1);
// ...
// for the box, use an extended version of the SetAsBox function which allows
// us to set a location and angle (location is offset from body position)
polygonShape.SetAsBox(2, 1, b2Vec2(20,0), 0); //moved 20 units right, same angle

Test() 
{
    // set up a dynamic body
    b2BodyDef myBodyDef;
    myBodyDef.type          = b2_dynamicBody;
    myBodyDef.position.Set(0, 20); //middle
    b2Body* dynamicBody = m_world->CreateBody(&myBodyDef);

    // prepare a shape definition
    b2PolygonShape polygonShape;
    b2FixtureDef myFixtureDef;
    myFixtureDef.shape          = &polygonShape;
    myFixtureDef.density     = 1;

    // add four square shaped fixtures around the body center
    for ( int i = 0; i < 4; i++) 
     {
        b2Vec2 pos( sinf(i*90*DEGTORAD), cosf(i*90*DEGTORAD) ); // radial placement
        polygonShape.SetAsBox(1, 1, pos, 0 );                         // a 2x2 rectangle
        dynamicBody->CreateFixture(&myFixtureDef);                    // add a fixture to the body
     }

     // make a static floor to drop things on
     myBodyDef.type          = b2_staticBody;
     myBodyDef.position.Set(0, 0);                                   // middle, bottom
     b2Body* staticBody = m_world->CreateBody(&myBodyDef);
     polygonShape.SetAsEdge( b2Vec2(-15,0), b2Vec2(15,3) ); // slightly sloped 
     staticBody->CreateFixture(&myFixtureDef);                    // add a fixture to the body
}

myFixtureDef.density     = 1;
myFixtureDef.friction     = 0; //new code

myFixtureDef.friction = i/4.0;

myFixtureDef.friction          = ...;
myFixtureDef.restitution     = 0;     //new code

fixture->SetDensity( ... );
fixture->SetRestitution( ... );
fixture->SetFriction( ... );

for (b2Fixture* f = body->GetFixtureList(); f; f = f->GetNext())
{
    // do something with the fixture 'f'
}

b2Fixture* f = body->GetFixtureList();
//     do something with the fixture 'f'

b2Fixture* myFixture = dynamicBody->CreateFixture(&myFixtureDef);
...
dynamicBody->DestroyFixture(myFixture);









你可能感兴趣的:(c)