Как изменить характеристики тела вручную? - PullRequest
1 голос
/ 19 февраля 2012

У меня есть тело, которое растет. Я добавил это тело в мир.

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

    }
}

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Возможно, вместо того, чтобы разрушать и воссоздавать все тело, вы могли бы выполнить то, что вам нужно, уничтожив и создав новый прибор ...

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

}

Извините за опечатки ... не проверял ни одного изэто ...

1 голос
/ 20 февраля 2012

Сначала в методе тиков убедитесь, что вы устанавливаете скорость и положение итераций, а затем просматриваете все тела, изменяя их:

-(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 для перемещения тела box2d, например-> ApplyLinearImpuse -> ApplyForce ... Если вы хотите явно установить положение и угол, то посмотрите -> SetTransform ()

Надеюсь, это поможет! Tams

...