2012-02-19 32 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 2012-02-21 14:50:14

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()

我希望这有助于! 噬细胞

+0

谢谢,但我使用这些方法)他们只能改变身体的位置,给一些更坏的,等等。我需要改变身体形状的大小。 (b2CirlceShape shape; shape.m_radius = ...这是我创建对象时使用的,可以以某种方式更新半径?)。我有**增长的对象**,我想知道如何做到这一点) – Buron 2012-02-19 21:28:58

+0

我不得不在我的应用程序中使用连接到b2Body的捏手势来调整精灵。我最终所做的就是摧毁并为每次迭代重新创建一个新的身体。它速度非常快,运作良好。也许这可以为你工作。 – tams 2012-02-19 22:45:10

+0

真的很感谢)正如我所理解的摧毁身体和克里特岛在每次迭代中再次是唯一的决定.. – Buron 2012-02-20 05:07:50