масса тела не изменяется с помощью box2d cocos2d - PullRequest
0 голосов
/ 28 января 2012

Я просто не могу понять, как работает эта массовая вещь.Я прочитал документы box2d (у которых есть много команд, которых нет в cocos2d на данный момент), и я пытался понять массовость.

Я знаю, что если я изменю плотность тела, это не изменитсявещь:

    //add body
b2BodyDef spriteBodyDef;
spriteBodyDef.type =b2_dynamicBody; //b2_staticBody;
spriteBodyDef.position.Set(pilot1.position.x/PTM_RATIO,pilot1.position.y/PTM_RATIO);
spriteBodyDef.userData = pilot1;
pilot1Body = world->CreateBody(&spriteBodyDef);    
b2CircleShape spriteShape; //b2polygon-for box shape
spriteShape.m_radius = 15.0/PTM_RATIO;
b2FixtureDef spriteShapeDef;
spriteShapeDef.restitution = 0.4f;
spriteShapeDef.shape = &spriteShape;
//spriteShapeDef.density=10.0f;

b2Fixture *fix=pilot1Body->GetFixtureList();
fix->SetDensity(1.5f);
pilot1Body->ResetMassData();
NSLog(@"mass2: %f", pilot1Body->GetMass());  
spriteShapeDef.isSensor = false;
pilot1Body->CreateFixture(&spriteShapeDef);
    [self addChild:pilot1];

спасибо большое.

1 Ответ

2 голосов
/ 28 января 2012

Вам необходимо установить новую плотность для некоторых или всех приборов, прикрепленных к корпусу, используя b2Fixture::SetDensity, а затем вызвать b2Body::ResetMassData, например:

    NSLog(@"mass1: %f", body->GetMass());
    b2Fixture *fix = body->GetFixtureList();
    while (fix) {
        fix->SetDensity(1.5f);
        fix = fix->GetNext();
    }
    body->ResetMassData();
    NSLog(@"mass2: %f", body->GetMass());
...