0

こんにちは、cocos2dObjectiveCと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辺から円が作成され、私が望むことを実行しているように見えます。誰かがより良い方法を持っているなら、私にtyを知らせてください

于 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 に答える