2

box2d を使用して作成するボックスがいくつかありますが、これらの復元はゼロに設定されています。しかし、それらが互いに落下すると、バウンス イベントが表示されます。重力をオフにすると完了しますが、重力も必要です。ここに私のコードがあります

UIImage *imageOfSnowV1 = [ UIImage imageNamed:[NSString stringWithFormat:@"Object%d.png",currentlySelected]];
    CCTexture2D  *texOfSnowV1 = [[ [CCTexture2D alloc] initWithImage:imageOfSnowV1 ] autorelease];
    CCSprite *sprite = [CCSprite spriteWithTexture:texOfSnowV1  rect:CGRectMake(0, 0, 32, 32)];
    [self addChild:sprite];
    sprite.position = ccp(p.x, p.y);
    sprite.tag=[temp intValue];


    // Define the dynamic body.
    //Set up a 1m squared box in the physics world

    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;

    bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
    bodyDef.userData = sprite;
    b2Body *bodyS = world->CreateBody(&bodyDef);

    // Define another box shape for our dynamic body.

    b2PolygonShape dynamicBox;
    dynamicBox.SetAsBox(.5f, .5f);//These are mid points for our 1m box




    b2MassData massData;
    massData.mass = 0.1f;
        bodyS->SetMassData(&massData);


    // Define the dynamic body fixture.
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &dynamicBox; 
    fixtureDef.density = 50.0f;
    fixtureDef.restitution=0.0f;
    fixtureDef.friction = 0.01f;


    bodyS->CreateFixture(&fixtureDef);

誰でも私を助けることができますか?

4

3 に答える 3

0

私が覚えているように、box2d はデフォルトで衝突するオブジェクトの最大の復元を使用するため、動的なボディの復元を 0 に設定しても、静的なボディが 0 より大きい場合、その復元が衝突に使用されます。必要に応じて b2MixRestitution 関数を変更できます。 .

乾杯、 クシシュトフ・ザブロツキ

于 2010-10-06T08:50:51.847 に答える
0

私は最近同じ問題を抱えています。私の解決策は、連絡先リスナーで新しい衝突を検出したときに、Y 座標をゼロにするだけです。ここで完璧にトリックを行います。

于 2011-10-16T17:06:08.840 に答える