2012-02-19 5 views
1

J'ai un corps qui grandit. J'ai ajouté ce corps au monde.Comment changer les caractéristiques des corps manuellement?

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

Je pense que je n'ai pas besoin de coller tout le code ici.

J'ai donc ajouté du corps au monde. La question est de savoir comment changer de position, de restitution ... du corps qui est déjà dans le monde? Suis-je autorisé à faire cela ici? (parce que j'obtiens des erreurs quand j'essaye de changer quelque chose dans la méthode tick).

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

    } 
} 

Répondre

1

Peut-être au lieu de détruire et de recréer le corps entier vous pouvez accomplir ce que vous avez besoin en détruisant et en créant un nouvel appareil ...

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

} 

Désolé pour les fautes de frappe ... ne testons de cela ...

+0

Merci pour cette solution) – Buron

1

d'abord dans la méthode tick assurez-vous que vous définissez les itérations de vitesse et de position, puis regardez à travers tous les corps les modifier:

-(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...(); 
    } 
} 

Regardez les méthodes dans la documentation box2d pour déplacer un corps box2d, par exemple-> ApplyLinearImpuse -> ApplyForce ... Si vous voulez définir explicitement la position et l'angle, alors regardez -> SetTransform()

J'espère que cela aide! Tams

+0

Merci, mais j'utilise ces méthodes) Ils peuvent seulement changer la position du corps, donner un peu de forse, etc. J'ai besoin de changer la taille de la forme du corps. (b2CirlceShape shape; shape.m_radius = ... C'est ce que j'utilise quand je crée un objet, et puis-je mettre à jour le rayon d'une façon ou d'une autre?). J'ai l'** objet en croissance ** et je veux savoir comment faire) – Buron

+0

J'ai dû redimensionner un sprite dans mon application en utilisant un geste de pincement qui était attaché à un b2Body. Ce que j'ai fini par faire était de détruire et de recréer un nouveau corps pour chaque itération de la pincée. C'était très rapide et ça a bien marché. Peut-être que cela peut fonctionner pour vous. – tams

+0

Vraiment merci) Comme je l'ai compris pour détruire le corps et la crète à nouveau dans chaque itération est la seule décision .. – Buron

Questions connexes