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

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

+0

Спасибо, но я использую эти методы). Они могут только изменить положение тела, дать некоторую форсуну и т. д. Мне нужно изменить размер формы тела. (b2CirlceShape shape; shape.m_radius = ... Это я использую, когда создаю объект, и могу как-то обновить радиус?). У меня есть ** растущий объект **, и я хочу знать, как это сделать) – Buron

+0

Мне пришлось изменить размер спрайта в моем приложении, используя жест щекол, который был прикреплен к b2Body. То, что я закончил, было уничтожением и воссозданием нового тела для каждой итерации щепотки. Это было очень быстро и хорошо работало. Возможно, это может сработать для вас. – tams

+0

Действительно спасибо) Как я понял, чтобы уничтожить тело и крест, он снова на каждой итерации является единственным решением .. – Buron

Смежные вопросы