大家好 我使用cocos2d objective c和box2d在ipad应用程序上工作。我的问题是关于box2d和与曲线的碰撞。基本上我在一个更大的圆形竞技场内有圆圈。较小的圆圈相互碰撞很好但我想知道如何使它们正确地与较大的竞技场圆圈的边缘碰撞,这样它们就不会离开竞技场并反弹回来。任何关于如何处理这个问题的想法都会很棒 欢呼声
答案 0 :(得分:0)
好吧,我让它工作但我不确定它是否正确的方法
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;
}
这创造了一个50面的圆圈,似乎正在做我想要的。如果有人有更好的方法请告诉我 TY
答案 1 :(得分:0)
不确定这是否是您要找的,但我在论坛上看到了这一点:
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);
您可以通过发送大型数组来了解如何添加更多积分