Cocos2d iphone box2d与曲线的碰撞

Cocos2d iphone box2d与曲线的碰撞,cocos2d-iphone,ipad,box2d,Cocos2d Iphone,Ipad,Box2d,大家好 我正在使用cocos2d objective c和box2d开发ipad应用程序。我的问题是关于box2d和与曲线的碰撞。基本上我在一个更大的圆形竞技场中有圆形。较小的圆圈相互碰撞很好,但我想知道如何使它们正确地与较大的竞技场圆圈的边缘碰撞,这样它们就不会离开竞技场并反弹回来。任何关于如何解决这个问题的想法都会很好 干杯好的,我让它工作了,但我不确定这是不是正确的方法 int sides = 50; float x_coordPREV=([Arena contentSize].

大家好 我正在使用cocos2d objective c和box2d开发ipad应用程序。我的问题是关于box2d和与曲线的碰撞。基本上我在一个更大的圆形竞技场中有圆形。较小的圆圈相互碰撞很好,但我想知道如何使它们正确地与较大的竞技场圆圈的边缘碰撞,这样它们就不会离开竞技场并反弹回来。任何关于如何解决这个问题的想法都会很好
干杯

好的,我让它工作了,但我不确定这是不是正确的方法

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;
    }
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+=竞技场位置.x;
y_coordPREV+=竞技场位置y;
b2BodyDef arenaBodyDef;
arenaBodyDef.position.Set(0,0);
b2Body*arenaBody=\u world->CreateBody(&arenaBodyDef);
B2polygonshapearenabox;
b2FixtureDef arenaShapeDef;
arenaShapeDef.shape=&arenaBox;
对于(浮动角度=0.0f;角度创建夹具(&A)和arenaShapeDef);
x_coordPREV=x_coord;
y_coordPREV=y_coord;
}
这将创建一个由50条边组成的圆,似乎在做我想做的事情。如果有人有更好的方法,请告诉我
ty

不一定是您想要的,但我在论坛上看到了:

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);
您可以看到如何通过发送更大的数组来添加更多点