0

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

4

2 回答 2

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 个边组成的圆圈,并且似乎正在做我想做的事情。如果有人有更好的方法请告诉我

于 2010-12-02T23:52:21.950 回答
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);

您可以看到如何通过发送更大的数组来添加更多点

于 2011-06-27T22:55:42.830 回答