2010-12-02 29 views
0

Salut tous im travaillant sur une application ipad en utilisant cocos2d objectif c et box2d. Ma question est en relation avec box2d et les collisions avec les courbes. Fondamentalement, j'ai des cercles dans une arène de plus grand cercle. les cercles plus petits entrent en collision les uns avec les autres, mais je veux savoir comment les faire entrer en collision avec les bords du grand cercle de l'arène afin qu'ils ne quittent pas l'arène et rebondissent. Toute idée sur la façon d'aborder ce problème serait géniale acclamationsbox2d collision avec des courbes

Répondre

0

ok je l'ai eu de travail, mais je ne suis pas sûr si c'est la bonne façon de le faire

int sides = 50; 

    float x_coordPREV=([Arena contentSize].width/2)*cos(0.0); 
    float y_coordPREV=([Arena contentSize].width/2)*sin(0.0); 
    x_coordPREV += Arena.position.x; 
    y_coordPREV += Arena.position.y; 

    b2BodyDef arenaBodyDef; 
    arenaBodyDef.position.Set(0,0); 
    b2Body *arenaBody = _world->CreateBody(&arenaBodyDef); 
    b2PolygonShape arenaBox; 
    b2FixtureDef arenaShapeDef; 
    arenaShapeDef.shape = &arenaBox; 

    for(float angle=0.0f;angle<(2*M_PI);angle+=(2*M_PI)/sides){ 
     float x_coord=([Arena contentSize].width/2-10)*cos(angle); 
     float y_coord=([Arena contentSize].width/2-10)*sin(angle); 
     x_coord += Arena.position.x; 
     y_coord += Arena.position.y; 
     arenaBox.SetAsEdge(b2Vec2(x_coordPREV/PTM_RATIO,y_coordPREV/PTM_RATIO),b2Vec2(x_coord/PTM_RATIO,y_coord/PTM_RATIO)); 
     arenaBody->CreateFixture(&arenaShapeDef); 
     x_coordPREV = x_coord; 
     y_coordPREV = y_coord; 
    } 

cela crée un cercle de 50 côtés et semble faire ce que je veux. si quelqu'un a une meilleure façon s'il vous plaît laissez-moi savoir ty

0

pas sur EIF ce i ce que vous cherchez, mais j'ai vu cela sur un forum:

b2BodyDef edgedef; 
edgedef.position.Set(0.f,10.f); 
b2Body* edge = world->CreateBody(&edgedef); 

b2Vec2 vertices[2]; 
vertices[0].Set(0.0f, 0.0f); 
vertices[1].Set(10.0f, 0.0f); 
int32 count = 2; 

b2PolygonShape polygon; 
polygon.Set(vertices, count); 

b2FixtureDef edgefixtureDef; 
edgefixtureDef.shape = &polygon; 

edge->CreateFixture(&edgefixtureDef); 

vous pourriez voir comment vous pouvez ajouter plus de points en envoyant un plus grand tableau