2013-06-12 13 views
8

È possibile modificare la forma di un Box2d b2Body in modo dinamico? Voglio fare questo per ottenere il seguente.modifica box2d forme del corpo dinamicamente

i). Aumentare il raggio di una forma circolare ad una determinata velocità

ii). Modifica delle dimensioni di un riquadro di delimitazione per uno sprite in modo che corrisponda al cambiamento dei fotogrammi dell'animazione.

+0

Non è possibile modificare la forma di box2d b2body in modo dinamico, ma è possibile ottenerlo distruggendo e ricreando il corpo di b2. – Renaissance

+0

hai solo bisogno di ricreare l'apparecchio, non tutto il corpo – LearnCocos2D

+0

Sì, sbaglio, stavo per dire ma ho scritto b2body. Devi solo ricreare solo l'apparecchio. – Renaissance

risposta

1
float radius; 
    radius = 1; 

creare il corpo:

b2BodyDef bodyDef; 
bodyDef.type = b2_dynamicBody; 
bodyDef.position.Set(300/PTM_RATIO, 150/PTM_RATIO); 
body = world->CreateBody(&bodyDef); 

b2CircleShape circleShape; 
circleShape.m_radius = radius; 

b2FixtureDef fixtureDef; 
fixtureDef.shape = &circleShape; 
fixtureDef.density = 1; 
fixtureDef.friction = 0.3f; 
body ->CreateFixture(&fixtureDef); 

nel metodo touch:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
    { 

    if (body != NULL) { 

    b2Fixture *fixtureA = body->GetFixtureList(); 
    body->DestroyFixture(fixtureA); 

    b2CircleShape circleShape; 
    circleShape.m_radius = radius + 0.3; 

    b2FixtureDef fixtureDef; 
    fixtureDef.shape = &circleShape; 
    fixtureDef.density = 1; 
    fixtureDef.friction = 0.3f; 
    body->CreateFixture(&fixtureDef); 

    radius = radius + 0.3; 

    } 

Con ogni corpo tocco diventerà più grande per 0,3.

Problemi correlati