Cocos2d iphone 使用box2d cocos2d不会更改身体质量

Cocos2d iphone 使用box2d cocos2d不会更改身体质量,cocos2d-iphone,box2d,box2d-iphone,Cocos2d Iphone,Box2d,Box2d Iphone,我就是搞不懂这件事是怎么回事。 我读过box2d文档(其中有许多命令目前不在cocos2d中),我试图理解mass 我知道如果我改变身体密度,它不会改变任何东西: //add body b2BodyDef spriteBodyDef; spriteBodyDef.type =b2_dynamicBody; //b2_staticBody; spriteBodyDef.position.Set(pilot1.position.x/PTM_RATIO,pilot1.position.y/PT

我就是搞不懂这件事是怎么回事。 我读过box2d文档(其中有许多命令目前不在cocos2d中),我试图理解mass

我知道如果我改变身体密度,它不会改变任何东西:

    //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];

非常感谢。

您需要使用
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());

谢谢,但我已经做到了:spriteShapeDef.density=0.0;pilot1Body->ResetMassData();我在玩密度从0到200的游戏,但它不会改变任何东西。我这里缺什么?@Rant,你有没有试过我的密码?我的代码不修改shapeDef的密度,它直接修改装置的密度。(请记住,夹具定义、形状定义、任何定义仅在创建夹具、形状、任何定义时使用,并且在创建对象后修改定义不会更改对象的属性)我按照您所说的做了-请查看我对问题的编辑以了解我做了什么。谢谢。我这样做的时候会在设定密度上崩溃。