2012-02-19 7 views
1

私は体が成長しています。私はこの体を世界に加えました。ボディの特性をどのように手動で変更できますか?

... 
someBody = world->CreateBody(&bodyDef); 
someFixture = tapBody->CreateFixture(&someFixtureDef); 
... 

ここにすべてのコードを貼り付ける必要はありません。

私は世界に身体を加えました。問題は、すでに世界にある身体の位置、傷害をどのように変更するかです。私はそれを許可されましたここに? (tickメソッドで何かを変更しようとするとエラーが発生するためです)。

-(void) tick: (ccTime) dt 
{ 
    world->Step(dt, velocityIterations, positionIterations); 
    for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) 
    { 

    } 
} 

答えて

1

たぶん全体ではなく、体を破壊し、再作成の新しい治具を破壊して作成することにより、必要なものを達成できた...任意のタイプミスのため申し訳ありません

for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) 
{ 
    // This assumes you only have one fixture 
    b2Fixture* f = b->GetFixtureList(); 
    f = f->GetNext(); 

    // Code here to create a new fixture/shape with different size (or whatever) 

    // Destory old fixture and create new one 
    b->DestoryFixture(f); 
    b2Fixture* someFixture = b->CreateFixture(&someFixtureDef); 

} 

が...いずれかをテストしていませんこれは...

+0

そのような解決に感謝します) – Buron

1

ダニの方法ではまず、あなたがそれらを変更する体のすべてに目を通す、その後、速度と位置の繰り返しを設定していることを確認してください:

-(void)update:(ccTime)dt { 
    int32 velocityIterations = 8; 
    int32 positionIterations = 3; 
    world->Step(dt, velocityIterations, positionIterations); 

    for(b2Body *b = world->GetBodyList(); b != NULL; b = b->GetNext()) { 
     //Do something with the body for example: b->ApplyLinearImpulse...(); 
    } 
} 

BOX2Dマニュアルの方法を見に移動します例:> ApplyLinearImpuse - > ApplyForce ...明示的に位置と角度を設定する場合は、 - > SetTransform()を見てください。

私はこれが助けてくれることを願っています! TAMS

+0

私はこれらの方法を使用していますが、彼らは体の位置を変更することができ、いくつかのforseなどを与えることができます。私は体の形の大きさを変える必要があります。 (b2CirlceShape shape; shape.m_radius = ...これは私がオブジェクトを作成するときに使用し、何らかの形で半径を更新できますか?)。私は**成長するオブジェクト**を持っていて、それをする方法を知りたい) – Buron

+0

b2Bodyに接続されたピンチジェスチャーを使用してアプリケーションでスプライトのサイズを変更する必要がありました。私がやったことは、ピンチの繰り返しごとに新しいボディを破壊して再作成することでした。それは非常に速く、うまくいった。おそらくそれはあなたのために働くことができます。 – tams

+0

本当にありがとう)私は体とクレタを破壊することを理解していたので、各反復で再び唯一の決定です。 – Buron

関連する問題